"*"标记之前的预期构造函数、析构函数或类型转换 模板化链表

Expected constructor, destructor, or type conversion before '*' token Templated linked list

本文关键字:析构函数 类型转换 链表 构造函数      更新时间:2023-10-16

我的问题与此非常相似。但是,我的实现有所不同,因为我使用了模板化的链接列表

这里是我得到错误的地方(第二行)。此函数的目的是返回一个指向列表

中第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是一个类型。当你有一个依赖于类型的名称(即依赖于模板参数的名称)时,

相关文章: