отсюда возникла ошибка - PullRequest
       13

отсюда возникла ошибка

3 голосов
/ 06 декабря 2009

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

У меня есть список классов шаблона. Элемент:

template <class T>
class tListItem{
    public:
        tListItem(T t){tData=t; next=0;}
        tListItem *next;
        T data(){return tData;}
    private:
        T tData;
};

если я попытаюсь инициализировать объект с не примитивным типом данных, например, например:

sPacket zomg("whaever",1);
tListItem<sPacket> z(zomg);

мой компилятор всегда выдает эту ошибку .. ошибка не генерируется с примитивными типами.

вывод компилятора:

../linkedList/tListItem.h: In constructor ‘tListItem<T>::tListItem(T) [with T = sPacket]’:
recvBufTest.cpp:15:   instantiated from here

../linkedList/tListItem.h:4: error: no matching function for call to ‘sPacket::sPacket()’

../packetz/sPacket.h:2: note: candidates are: sPacket::sPacket(const char*, int)

../packetz/sPacket.h:1: note:                 sPacket::sPacket(const sPacket&)

я бы не стал вас беспокоить, но я не хочу тратить 2 часа с чем-то глупым ..... так что спасибо за все ваши ответы

Ответы [ 3 ]

3 голосов
/ 06 декабря 2009

В вашем коде необходим конструктор по умолчанию для типа T. Измените конструктор шаблона на:

 tListItem(T t)  : tData(t), next(0) {}

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

0 голосов
/ 06 декабря 2009

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

Также публикуйте логи в кодовой разметке, чтобы она выглядела дословно.

0 голосов
/ 06 декабря 2009

Я получил это, чтобы построить на своей собственной системе, я могу ошибаться, но я думаю, что ваша проблема в том, что не существует конструктора по умолчанию для sPacket:

класс sPacket {

общественность:

sPacket () {} // пустой конструктор по умолчанию

sPacket (строка s, int a) {s = s; A = A;}

};

Надеюсь, это полезно!

...