C ++模板化链表获取复杂数据类型的数据元素

时间:2014-05-24 00:38:08

标签: c++

我一直致力于更新旧的模板化链表,以便能够采用复杂的数据类型。但我不知道如何使它能够返回节点类中的数据元素。目前我的节点类的代码如下所示:

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是基元,但是如果使用非基元(比如说结构),这将完全正常,它会产生运行时错误。我推测,因为结构不会为=运算符执行运算符重载。有没有一种简单的方法可以解决这个问题而不需要彻底检修课程?

1 个答案:

答案 0 :(得分:0)

它不是关于重载=运算符,而是关于为结构实现赋值运算符。如果你这样做,你就不需要改变你的Node课程,除非我错过了其他内容。

以上假设您将在节点内复制数据。或者,您可以通过引用传递数据。在这种情况下,您需要注意在删除Node对象之前不会删除数据,否则在尝试从Node中访问已删除的数据对象时会发生崩溃。