2011-04-27 173 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