2011-09-29 70 views
0

我的問題是真的類似this。然而,我的實現不同之處在於我使用一個模板鏈表預期的構造函數,析構函數或類型轉換「*」標記爲模板鏈表

這裏就是我得到錯誤(第二行)。該功能的目的是在第k個位置列表

template <class T> 
List<T>::ListNode* List<T>::find(int k) 
{ 
    ListNode * curr = head; 
    while(curr != NULL && k > 0) { 
     curr = curr->next; 
     k--; 
    } 

    return curr; 
} 

返回一個指向一個節點,這是我的名單看起來像(由節點,其存儲類型T的任意數據)

template <class T> 
class List 
{ 
    private: 
    class ListNode 
    { 
     public: 
     ListNode(); 
     ListNode(T const & ndata); 

     ListNode * next; 
     ListNode * prev; 
     const T data; 
    }; 

基本上這是與我鏈接到的問題相同的問題,除了我的列表是模板化的。因此,在修改了其他問題後,我的代碼仍然會引發錯誤。任何想法爲什麼發生這種情況?

+0

您也可以在這裏包含錯誤的描述。 –

+0

郵政錯誤,你得到它的確切行。 –

+0

您可能需要使用'的std :: list',而不是寫你自己的。您的問題是不能構建自己的一個原因:STL版本已經過測試。 –

回答

4

您需要使用typename關鍵字:

template <class T> 
typename List<T>::ListNode* List<T>::find(int k) 
{ 
    ... 
} 

這讓編譯器知道ListNode是一種類型。只要你有一個從屬名稱(即一個依賴於模板參數),這是一種這是必要的。

+0

完美,謝謝!永遠不會想到這個... – mwoz

相關問題