为 List 编写查找函数时出现语法错误
syntax error when writing find function for List
我遇到了一个语法错误,我确信这是正确的:
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
,以便使用其他实现的代码无法编译。
相关文章:
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- 为什么我会收到错误 C2143 语法错误:缺少"*"之前的';'?
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- "错误 C0000:语法错误,令牌"<EOF>"处出现意外$end,并且不确定
- 我该怎么做才能摆脱使用命名空间时的语法错误?
- 如何摆脱错误c2061;语法错误 cout?
- 语法错误:D3DX10Core 中的标识符'TEXTMETRICA'
- 错误 C2146:语法错误:标识符"A1"之前缺少","
- main.cpp(11):错误 C2059:语法错误:"字符串"
- RedisGraph 语法错误在偏移量 8 靠近"创建"
- 如何修复此 FSM C++语法错误 C3867
- 函数错误 C2059:语法错误:'>'不起作用
- 为什么在main()之前断言会导致语法错误"error: expected ')' before numeric constant"?
- c++default-int中的语法错误
- "pip install openexr"上的语法错误:错误的编译器?
- 为什么我收到语法错误:在"*"之前缺少";"
- 错误 C2059:语法错误:从结构成员声明'constant'
- C++语法错误,编译器不会警告或 int v = func(&v) 出错;
- 我正在调试这个C++程序.编译器不再显示语法错误,但存在隐藏的逻辑错误