my compiler is torturing me with this instantiation error which I completely don't understand.
i have template class listItem:
template <class T>
class tListItem{
public:
tListItem(T t){tData=t; next=0;}
tListItem *next;
T data(){return tData;}
private:
T tData;
};
if i try to initialize an object of it with non-primitive data type like e.g:
sPacket zomg("whaever",1);
tListItem<sPacket> z(zomg);
my compiler always throws this error.. the error isnť thrown with primitive types.
output from compiler is:
../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&)
i wouldn't bother you but i don't want to spend 2 hours with something stupi开发者_Go百科d..... so thx for all your replies
As it stands, your code needs a default constructor for the type T. Change your template constructor to:
tListItem(T t) : tData(t), next(0) {}
The difference being that your version default constructs an instance of type T and then assigns to it. My version uses an initialisation list to copy construct the instance, so no default constructor is required.
I got this to build on my own system, I could be wrong, but I think your problem is that there isn't a default constructor for sPacket:
class sPacket {
public:
sPacket() { } //empty default constructor
sPacket(string s, int a) {s=s; a=a;}
};
I hope this is helpful!
GCC can split error messages across multiple reports in order to describe problems that have multiple locations. You may need to read the the messages as one single message, and may even need the message that preceeds this one to make sense.
Also post logs in code mark-up to force it to appear verbatim.
精彩评论