2013-04-02 36 views
0

我寫了一個雙節點鏈表的「節點」模板類。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 

我不能識別上面提到的任何語法錯誤。請幫助我,我做錯了什麼?提前致謝。

+2

哪個版本的VS? – Angew

+0

在VS2010上編譯得很好。 – Asha

+2

這是整個標題嗎?我敢打賭,必須有一些額外的代碼,例如標頭警衛或包含指令。你給出的代碼編譯得很完美(在包含''或另一個定義'NULL'的頭文件後),所以這個問題必須在你沒有發佈的代碼中。我敢打賭,你會在'Node'之前包含的類定義之後忘記了一個分號,但這是一個瘋狂的猜測。 –

回答

1

它看起來像你沒有包含NULL的定義。

請考慮改爲使用nullptr。在VS2010中,您可能需要爲其添加定義,但在更改爲完全兼容C++ 11的編譯器時,您將使用專爲此目的而設計的C++關鍵字。

+0

nullptr與VS2010一起工作良好。 – Sharath