Шаблонный класс C ++ дает синтаксические ошибки без явных ошибок

Я написал шаблонный класс «Узел» для двусвязного списка.

Заголовочный файл:

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

Решение

Похоже, вы не включили какое-либо определение для NULL.

Пожалуйста, подумайте об использовании nullptr вместо. В VS2010 вам может понадобиться добавить определение для этого, но при переходе на полностью совместимый с C ++ 11 компилятор вы будете использовать ключевое слово C ++, которое было разработано для этой цели.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector