2011-04-27 224 views
0

我有這樣的功能:c + +編譯模板錯誤

template <typename T> 
List<T>::ListNode *List<T>::find(int index) const 
{ 
    if ((index < 1) || (index > getLength())) 
     return NULL; 
    else 
    { 
     ListNode *cur = head; 
     for (int skip = 1; skip < index; ++skip) 
      cur = cur->next; 
     return cur; 
    } 
} 

這是給我的這兩個錯誤,每個在第二行:

expected constructor, destructor, or type conversion before '*' token 
expected `;' before '*' token 

我所有的其他使用模板,只是工作方法精細。我認爲問題在於我調用我的ListNode結構的語法是錯誤的。我以前沒有使用模板,現在我正在嘗試使用模板實現它,並且我收到了這些錯誤。

+0

是getLength()使用類型特定的方法嗎? – clamchoda 2011-04-27 03:44:53

回答

8

應該

template <typename T> 
typename List<T>::ListNode *List<T>::find(int index) const 
// ... 

typename告訴List<T>::ListNode代表了一種編譯器。在模板中時,遇到::時會出現分析歧義。因此,如果出現以下任何情況,您必須使用typename關鍵字::是一種類型。

+0

非常感謝! – 2011-04-27 03:45:45

+0

Sooo接近4k ... :-( – 2011-04-27 03:53:51

+2

4k!Woohoo!:-) – 2011-04-27 03:55:13