我正在尝试编写一个链表。节点定义如下:
template<typename T>
class Node {
public:
T value;
Node<T> *next;
};
对于原始类型,我的链表非常有效。但是,当我尝试使用它来存储自定义类的实例时,我得到错误“调用隐式删除的Node的默认构造函数”。
我认为问题在于,当我尝试创建新节点时,我没有初始化value
,这是T
。但我不知道该怎么做......
template<typename T>
Node<T> *LinkedList<T>::makeNewNode(T val)
{
Node<T> *newNode = new Node<T>;
newNode->value = val
newNode->next = NULL;
return newNode;
}
答案 0 :(得分:0)
虽然我不知道你的T
是什么,但我认为,它不是默认构造的。在这种情况下,只需调用Node
的正确拷贝构造函数:
template<typename T>
Node<T> *LinkedList<T>::makeNewNode(const T& val)
{
return new Node<T>(val);
}
反过来要求你的Node
类有一个接受T
的构造函数:
template<typename T>
class Node {
public:
T value;
Node<T> *next;
Node(const T& value) : value(value), next(nullptr) { }
};
答案 1 :(得分:0)
Node
的构造函数应初始化value
字段,例如:
template<typename T>
class Node {
public:
T value;
Node<T> *next;
Node(const T& value) : value(value), next(nullptr) { }
};
然后在调用构造函数时直接提供值:
template<typename T>
Node<T> *LinkedList<T>::makeNewNode(const T& val)
{
Node<T> *newNode = new Node<T>(val);
return newNode;
}