Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Определить двухмерную матрицу целочисленных элементов int максимальным размером 20*20 http://www.cyberforum.ru/cpp-beginners/thread545668.html
1.Определить двухмерную матрицу целочисленных элементов int максимальным размером 20*20. 2.В диалоге запросить размер обрабатываемой матрицы или завершение работы программы. 3.Ввести матрицу...
C++ Замена елементов в матрице Всем привет, можете помочь с заданием ? Нужно заменить самый большой элемент каждой строки матрицы, суммой элементов размещенных до нее. Матрица генерируется из случайных чисел, размерность мы... http://www.cyberforum.ru/cpp-beginners/thread545661.html
ALGLIB собственные векторы C++
Здравствуйте, может, кто пользовался библиотекой ALGLIB, никак не могу понять, как собственные векторы вывести. Пользуюсь функцией rmatrixevd, хотелось бы получить правые векторы, помогите пожалуйста.
C++ Проблема передали ifstream через указатель
Ребята, объясните ибо в книгах не нашел. Как правильно передать в виде параметра поток ifstream? void parse(string *str, ifstream *FILE){ do{ cout << *str; } while( getline(FILE, *str)...
C++ Сортировки гирь на весах http://www.cyberforum.ru/cpp-beginners/thread545637.html
Здравствуйте уважаемые программисты. Помогите решить такую задачу: Имеются весы без гирь и пять различных грузов. На каждую из двух чашек весов можно класть по одному грузу. Расположить грузы по...
C++ Получить в файле f последовательно числа Фибоначчи: u0,u1,...,un+1. Дан файл f, компоненты u0,u1,...,un которого являются последовательными числами Фибоначчи. Получить в файле f последовательно числа Фибоначчи: u0,u1,...,un+1. Решите на С++.Не могу понять эту... подробнее

Показать сообщение отдельно
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517

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

11.04.2012, 23:43. Просмотров 1081. Ответов 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)|
Полный лог ошибки:
Код
||=== 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru