2014-10-16 53 views
1

第一次問這麼溫柔。返回類型的線外定義與聲明中的不同

我遇到了返回函數的自定義類型的問題。更具體地說,我有一個鏈表,並且我正在編寫一個遍歷列表末尾並返回指向該節點的指針的函數。不幸的是,我得到一個討厭的錯誤:

頭文件中包含的「MySpace」的範圍內「的MySpace返回類型外的線定義:: CDAL :: tailNode從在聲明不同」命名空間和模板類CDAL

private: 

struct Node 
{....}; 

函數頭

Node* tailNode(); 

,並在.cpp

​​

我試過使用struct,因爲有人提到了非typedef聲明,您有時會需要它,並且我不再收到未知類型的錯誤,而是收到了此代碼。

在此先感謝您的幫助。

+0

除了我的回答,除非你真的知道你在做什麼,否則你不應該在.cpp文件中定義模板。他們在使用時會給出未定義的參考。相反,只需在.h文件中定義該函數即可。 – 0x499602D2 2014-10-16 22:43:22

回答

2

Node是內mySpace::CDAL<T>聲明所以它的名稱在定義是合格的:也沒有必要

template <typename T> 
struct typename mySpace::CDAL<T>::Node* mySpace::CDAL<T>::tailNode() 
{...} 

struct。把它拿出來不會有什麼區別。

+0

@LightnessRacesinOrbit爲真。 – 0x499602D2 2014-10-17 00:25:22