为 List 编写查找函数时出现语法错误

syntax error when writing find function for List

本文关键字:语法 错误 函数 List 查找      更新时间:2023-10-16

我遇到了一个语法错误,我确信这是正确的:

expected constructor, destructor, or type conversion before '*' token
expected `;' before '*' token 

利斯特·

#ifndef LISTP_H
#define LISTP_H
template <typename T>
class ListP
{
private:
    struct ListNode
    {
        T item;
        ListNode* next;
    };
    ListNode* find(int index) const;
    ......
}

ListP.cpp

template <typename T>
ListP<T>::ListNode* ListP<T>::find(int index) const
{
 ......
}

错误发生在线路上。

ListP<T>::ListNode* ListP<T>::find(int index) const

看起来您有 3 个问题:

类定义后缺少分号:

};

缺少typename

typename ListP<T>::ListNode* ListP<T>::find(int index) const

有关详细信息,请参阅必须将"模板"和"类型名称"关键字放在何处以及为什么

你应该在头文件中实现模板

请参阅为什么模板只能在头文件中实现?以获得很好的解释。

模板函数通常在头文件中实现,不要将定义放在 cpp 中

1 您的代码不正确,您必须添加 typename 以消除ListNode作为类型(而不是静态数据成员)的歧义:

template <typename T>
typename ListP<T>::ListNode* ListP<T>::find(int index) const
{
 ......
}

2 在源文件中实现模板时,请确保代码中实际使用的所有实现(包括标头在内的所有文件)实际上都在 List.cpp 中实例化。您可以确保使用 static_assert ,以便使用其他实现的代码无法编译。