所以我试图在C ++中实现一系列轧机链表
template<class T>
class Node
{
private:
Node *next;
T item;
public:
Node(T item)
: item(item)
{
this->next = NULL;
}
Node<T> add(T item) {
this->next = new Node(item);
return *this->next;
}
bool hasNext()
{
return this->next == NULL;
}
Node<T> getNext()
{
return *this->next;
}
T value()
{
return this->item;
}
};
void main()
{
Node<int> node(3);
node.add(3).add(4);
cout << node.value();
cout << node.getNext().value();
cout << node.getNext().getNext().value();
cin.get();
}
但是我无法让它发挥作用。特别是本节:
node.add(3).add(4);
cout << node.value();
cout << node.getNext().value();
cout << node.getNext().getNext().value();
如果我将add
和getNext
函数更改为Node<T>*
而不是Node<T>
,则可以正常工作。但为什么解除引用会导致代码中断?我认为.
符号比->
更有意义,但我无法使其工作。我做错了什么?
答案 0 :(得分:7)
现在您正在复制您添加的节点,而不是返回您创建的实际节点。括号只是为稍后需要查看代码的其他人添加了一些清晰度。 add函数需要像这样改变:
Node<T>& add(T item) {
this->next = new Node(item);
return *(this->next);
}
或者您可以返回指向新创建的节点的指针,但是这会使用.
而不是主->
中断。
还需要对next()