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

时间:2013-09-25 09:30:23

标签: c++ list syntax

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

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

ListP.h

#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 个答案:

答案 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