我的编译器用这个实例化错误折磨我,我完全不明白。
我有模板类listItem:
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&)
我不会打扰你,但我不想花两个小时愚蠢.....所以你回复所有答案
答案 0 :(得分:3)
目前,您的代码需要类型T的默认构造函数。将模板构造函数更改为:
tListItem(T t) : tData(t), next(0) {}
不同之处在于您的版本默认构造了类型为T的实例,然后分配给它。我的版本使用初始化列表来复制构造实例,因此不需要默认构造函数。
答案 1 :(得分:0)
我得到这个建立在我自己的系统上,我可能是错的,但我认为你的问题是没有sPacket的默认构造函数:
class sPacket {
公共:
sPacket(){} //清空默认构造函数
sPacket(string s,int a){s = s; A = A;}
};
我希望这有用!
答案 2 :(得分:0)
GCC可以跨多个报告拆分错误消息,以描述具有多个位置的问题。您可能需要将消息作为单个消息阅读,甚至可能需要在此消息之前的消息才有意义。
同时在代码标记中发布日志以强制它逐字显示。