我遇到了语法错误,我确信这是正确的:
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;
......
}
template <typename T>
ListP<T>::ListNode* ListP<T>::find(int index) const
{
......
}
错误发生在该行。
ListP<T>::ListNode* ListP<T>::find(int index) const
答案 0 :(得分:5)
看起来你有3个问题:
课程定义后缺少分号:
};
缺少typename
:
typename ListP<T>::ListNode* ListP<T>::find(int index) const
有关详细信息,请参阅Where and why do I have to put the “template” and “typename” keywords?。
你应该在头文件
中实现模板请参阅Why can templates only be implemented in the header file?以获得更好的解释。
答案 1 :(得分:0)
1 您的代码不正确,您必须添加typename
以消除ListNode
类型的歧义(而不是静态数据成员):
template <typename T>
typename ListP<T>::ListNode* ListP<T>::find(int index) const
{
......
}
2 在源文件中实现模板时,请确保代码中实际使用的所有实现(包括标头的所有文件)实际上都是在List.cpp中实现的。您可以确保使用static_assert
,以便使用其他实现的代码无法编译。
答案 2 :(得分:0)
模板函数通常在头文件中实现,不要把定义放在cpp
中