1

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

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

列表P.h

#ifndef LISTP_H
#define LISTP_H
template <typename T>
class ListP
{
private:
    struct ListNode
    {
        T item;
        ListNode* next;
    };

    ListNode* find(int index) const;
    ......
}

列表P.cpp

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

错误发生在线路上。

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

3 回答 3

5

看起来你有3个问题:

类定义后缺少分号:

};

缺少typename

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

请参阅我必须在哪里以及为什么必须放置“模板”和“类型名称”关键字?了解更多信息。

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

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

于 2013-09-25T09:34:22.550 回答
0

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

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

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

于 2013-09-25T09:34:14.840 回答
0

模板函数一般在头文件中实现,不要把定义放在cpp中

于 2013-09-25T09:34:15.307 回答