我一直致力于更新旧的模板化链表,以便能够采用复杂的数据类型。但我不知道如何使它能够返回节点类中的数据元素。目前我的节点类的代码如下所示:
using namespace std;
#ifndef Node_A
#define Node_A
template <class T>
class Node
{
public:
Node();
~Node();
T getData();
Node* getNext();
void setData(T);
void setNext(Node*);
private:
Node *next;
T data;
};
template <class T>
Node<T>::Node()
{
next = NULL;
return;
}
template <class T>
Node<T>::~Node()
{
return;
}
template <class T>
T Node<T>::getData()
{
return data;
}
template <class T>
Node<T>* Node<T>::getNext()
{
return next;
}
template <class T>
void Node<T>::setData(T a)
{
data = a;
return;
}
template <class T>
void Node<T>::setNext(Node* a)
{
next = a;
return;
}
#endif
现在,如果数据类型T是基元,但是如果使用非基元(比如说结构),这将完全正常,它会产生运行时错误。我推测,因为结构不会为=运算符执行运算符重载。有没有一种简单的方法可以解决这个问题而不需要彻底检修课程?
答案 0 :(得分:0)
它不是关于重载=运算符,而是关于为结构实现赋值运算符。如果你这样做,你就不需要改变你的Node
课程,除非我错过了其他内容。
以上假设您将在节点内复制数据。或者,您可以通过引用传递数据。在这种情况下,您需要注意在删除Node对象之前不会删除数据,否则在尝试从Node中访问已删除的数据对象时会发生崩溃。