Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517

Не компилируется: что не так с конструктором структуры?

11.04.2012, 23:43. Показов 3158. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть некий класс - односвязный линейный список, с элементами типа TElem. Шаблонность здесь только чтобы хранить различные объекты в списке и собственно эта же шаблонность и приводит к ошибке при компиляции.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
template <class T>
CSparseArray
{
    CSparseArray()
    :size(0)
    {
        m_First= NULL;
        m_Last= NULL;
    }
 
    CSparseArray& Set(int index, const T& value)
    {
        if(size==0)
        {
            m_First= m_Last= new TElem(index, value);
            size++;
            return *this;
        }
    /// здесь много всего, но не буду приводить это
     }
 
   protected:
    struct TElem
    {
    TElem(const int& index,const T& value, TElem* const next= 0)
    {
        m_Idx= index;
        m_Val= value;
        m_Next= next;
    }
 
    TElem* m_Next;
    int m_Idx;
    T m_Val;
    };
 
 
    TElem* m_First;
    TElem* m_Last;
    int size;
};
Проблемы с стандартными типами нет, а вот с вот таким вот (искусственно созданный пример приводящий к ошибке компиляции):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class CInt
{
public:
    CInt(int x)
    :data(x){}
 
    CInt(const CInt& obj)
    {
        data=obj.data;
    }
 
    bool operator<(const CInt& right) const
    {
        return data<right.data;
    }
 
    bool operator==(const CInt& right) const
    {
        return data==right.data;
    }
 
    friend ostream& operator<<(ostream& os, const CInt& print)
    {
        return os<<print.data;
    }
private:
    int data;
};
и тут же main:
C++
1
2
3
4
5
6
int main()
{
    CSparseArray<CInt> ZZ;
    CInt obj(100);
    ZZ. Set(100,obj);
}
Сразу же будут вот такие ошибки, связанные с тем что в методе Set при создании нового объекта
C++
1
m_First= m_Last= new TElem(index, value);
и вызове моего конструктора для типа TElem
C++
1
TElem(const int& index,const T& value, TElem* const next= 0)
Не найдётся подходящий конструктор для типа CInt, но почему это не найдётся?
C++
1
2
3
error: no matching function for call to 'CInt::CInt()'|
|note: candidates are: CInt::CInt(const CInt&)|
note:                 CInt::CInt(int)|
Полный лог ошибки:
Code
1
2
3
4
5
6
7
8
||=== Debug ===|
main.cpp||In constructor 'CSparseArray<T>::TElem::TElem(const int&, const T&, CSparseArray<T>::TElem*) [with T = CInt]':|
main.cpp|82|instantiated from 'CSparseArray<T>& CSparseArray<T>::Set(int, const T&) [with T = CInt]'|
main.cpp|379|instantiated from here|
main.cpp|298|error: no matching function for call to 'CInt::CInt()'|
main.cpp|347|note: candidates are: CInt::CInt(const CInt&)|
main.cpp|344|note:                 CInt::CInt(int)|
||=== Build finished: 1 errors, 0 warnings ===|
Что я делаю не так?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.04.2012, 23:43
Ответы с готовыми решениями:

Что не так с конструктором
Здравствуйте не могу понят почему не компилируется, помогите пожалуйста разобраться где ошибка в конструкторе Вот класс: class...

Что не так с конструктором
Хотел сделать конструктор что бы передавались туда значения по умолчанию, но пищит ошибку, что не так? Код конструктора: ...

Что не так с конструктором?
import java.util.Random; class VehicleConstructor{ private int speed; private int timeDriven; private int run; ...

7
 Аватар для kazak
3601 / 2742 / 355
Регистрация: 11.03.2009
Сообщений: 6,300
12.04.2012, 00:04
Подозреваю, что компилятору не хватает конструктора по умолчанию.
1
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
12.04.2012, 00:06  [ТС]
Тьфу, вот я затупил же. Не умею я читать ошибки компилятора раз пол часа сидел думал, решение очевидно же:
C++
1
2
3
4
5
6
    TElem(const int& index,const T& value, TElem* const next= 0)
:m_Val(value)
    {
        m_Idx= index;
        m_Next= next;
    }
0
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
12.04.2012, 00:10  [ТС]
kazak, Беда же в том была что нельзя писать CInt, такой себе CInt кто-то без меня может написать и тыкнуть мне пальцем "Аяяяяй это не компилится"

Добавлено через 1 минуту
IPtv, забыл упомянуть что не CInt нельзя трогать, я его искусственно создал как проблемный, спрятать проблему не значит решить её
0
12.04.2012, 00:12

Не по теме:

Gepar, а ваш компилятор нормально переваривает это без ключевого слова class (строки 2-3)?

0
12.04.2012, 03:37  [ТС]

Не по теме:

HighPredator, нет конечно, я кроме структуры сам код донабирал здесь в форме ответа на сообщение, слово class как-то упустить умудрился, не знаю как.

0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
12.04.2012, 09:04
Цитата Сообщение от Gepar Посмотреть сообщение
забыл упомянуть что не CInt нельзя трогать, я его искусственно создал как проблемный, спрятать проблему не значит решить её
Это глупости. Всегда есть некоторые правила, в данном случае это наличие конструктора. Посмотрите хотя бы на STL-контейнеры.

C++
1
std::vector<CInt> v(10);
Code
1
2
3
4
5
6
error: no matching function for call to 'CInt::CInt()'
note: candidates are:
note: CInt::CInt(const CInt&)
note:   candidate expects 1 argument, 0 provided
note: CInt::CInt(int)
note:   candidate expects 1 argument, 0 provided
При этом если просто создать контейнер, то все нормально.
C++
1
std::vector<CInt> v;
Все почему? Потому что контейнер должен знать, как ему создавать объекты. Мне что теперь бежать к комитету по стандартизации и кричать: "Ааааа, не компилируется!", так Вы себе это представляете?
1
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
13.04.2012, 11:41  [ТС]
Цитата Сообщение от fasked Посмотреть сообщение
Это глупости. Всегда есть некоторые правила, в данном случае это наличие конструктора.
Значит со мной играли не по правилам
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.04.2012, 11:41
Помогаю со студенческими работами здесь

Что не так с конструктором?
Изучаю конструктор, попробовал создать программку, а вышла ахинея... На консоле отображает не попорядку(как должно быть(сначала Type,...

что не так с конструктором с параметрами
создаю экземпляры класса , один через конструктор с параметрами но указываю параметрами он мне пишет ошибка что преобразования типов не...

не компилируется про в командной строке, что не так?
CSEG segment org 100h begin: mov ah,9 mov dx,offset Message int 21h mov ch,3 vvodchi; call vvodchi loop vvodchi

Справка не компилируется. Видимо, что-то не так с ссылками...
Создал такой файл справки: Скачал компайлер с офф сайта Не компилируется. Видимо, что-то не так с ссылками. Помогите, плиз.

Что не так с кодом? Компилируется, но не работает (связные списки)
#include &quot;stdio.h&quot; #include &quot;stdlib.h&quot; #include &lt;string.h&gt; #include &quot;iostream&quot; using namespace std; class Elem { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru