C ++模板类提供语法错误而没有明显的错误

时间:2013-04-02 08:35:33

标签: c++ templates syntax-error doubly-linked-list

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

标题文件:

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

我无法识别上面提到的任何语法错误。请帮帮我,我做错了什么?提前谢谢。

1 个答案:

答案 0 :(得分:1)

看起来你没有包含一些NULL的定义。

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