2011-09-29 68 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

相关问题