我为双向链表编写了一个“节点”模板类。
标题文件:
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
我无法识别上面提到的任何语法错误。请帮帮我,我做错了什么?提前谢谢。
答案 0 :(得分:1)
看起来你没有包含一些NULL的定义。
请考虑改用nullptr
。在VS2010中,您可能需要为其添加定义,但在更改为完全兼容C ++ 11的编译器时,您将使用为此目的而设计的C ++关键字。