c++ - '*' token 模板化链表之前的预期构造函数、析构函数或类型转换

标签 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; 
    };

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

最佳答案

您需要使用typename关键字:

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

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

关于c++ - '*' token 模板化链表之前的预期构造函数、析构函数或类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7602201/

相关文章:

c++ - C/C++ 工作流引擎

c - 如何在 C 中使用 sprintf 和 char 指针

c++ - 需要帮助更改 char* 中的单个字符

c - K&R 在这里用这个链表做什么?

java - ListIterator 在开始/结束时有不同的行为

c++ - 如何从模板类中的方法返回 NULL

c++ - 您可以在迭代时更改 std::list 吗?

c++ - 模板类的容器对象

c - 指向错误的列表成员

java - ArrayList 中的一行未打印出来