0

我为双向链表编写了一个“节点”模板类。

头文件:

template< class T >
class Node
{
public:
    Node();
    ~Node();

    Node<T>* GetNext();
    Node<T>* GetPrev();

    void SetNext( Node<T>* pNode );
    void SetPrev( Node<T>* pNode );

    void SetData( T& data );
    T*  GetData();

private:
    Node<T>*    p_Next;
    Node<T>*    p_Prev;
    T*      p_Data; 
};



template< class T >
Node<T>::Node() : p_Next(NULL), p_Prev(NULL), p_Data(NULL)
{

}

//======================================================================================

template< class T >
Node<T>::~Node()
{
    if( p_Data != NULL)
        delete p_Data;

    p_Next = NULL;
    p_Prev = NULL;
}

//======================================================================================

template< class T >
Node<T>* Node<T>::GetNext()
{
    return p_Next;
}

//======================================================================================

template< class T >
Node<T>* Node<T>::GetPrev()
{
    return p_Prev;
}

//======================================================================================

template< class T >
void Node<T>::SetData( T& data )
{
    if(p_Data == NULL)
        p_Data = new T;

    *p_Data = data;
}

//======================================================================================

template< class T >
T*  Node<T>::GetData()
{
    return p_Data;
}

当我尝试编译它时,Visual Studio 在具有构造函数实现的行中给出了以下语法错误。

error C2143: syntax error : missing ';' before '<'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2988: unrecognizable template declaration/definition
error C2059: syntax error : '<'
error C2588: '::~Node' : illegal global destructor
fatal error C1903: unable to recover from previous error(s); stopping compilation

如上所述,我无法识别任何语法错误。请帮助我,我做错了什么?提前致谢。

4

1 回答 1

1

看起来您还没有为 NULL 包含一些定义。

请考虑nullptr改用。在 VS2010 中,您可能需要为此添加定义,但是当更改为完全兼容 C++11 的编译器时,您将使用为此目的而设计的 C++ 关键字。

于 2013-04-02T08:58:55.233 回答