在'*'标记之前预期的构造函数,析构函数或类型转换模板化链接列表

时间:2011-09-29 19:08:42

标签: c++ pointers linked-list

我的问题与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; 
    };

基本上这是与我链接的问题相同的问题,除了我的列表是模板化的。因此,在进行了修复其他问题的更改之后,我的代码仍然会抛出错误。关于为什么会发生这种情况的任何想法?

1 个答案:

答案 0 :(得分:4)

您需要使用typename关键字:

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

这让编译器知道ListNode是一种类型。只要你有一个类型的依赖名称(即一个依赖于模板参数的名称),就需要它。