无参数列表无效使用template-name

时间:2012-04-04 09:59:41

标签: c++ templates

所以我有一个类名称存储库,它只是一个简单的数组。这是该类的一部分:

template<class Element>
class repository {
private:
    int size;
    int capacity;
    Element* elements;

我有另一个名为participant的类。我想拥有一个参与者存储库,并使用一个名为controller的新类在该存储库上执行操作。但我不知道如何在控制器中声明存储库的类型。 / p>

以下是班级参与者的一部分:

class participant {
private:
    int position;
    int score;

这是类控制器的一部分:

#include "repository.h"
#include "participant.h"
class controller {
private:
    repository repository;
    repository temporary;
    void createCopy();
public:
    controller();
    controller(repository repo);

我得到了错误:

- 在没有参数列表的情况下无效使用模板名称'repository'在存储库存储库和存储库临时存储的行中;

-expected')'在带有controller(存储库repo)的行中的'repo'之前;

如何在类控制器的声明中声明存储库的类型和临时类,以便我不会得到任何其他错误?

1 个答案:

答案 0 :(得分:4)

存储库是一个类模板,因此您需要将数据成员声明为

private:
    repository<SomeType> repository; // but this hides repository name
    repository<SomeType> temporary;  // repository has another meaning now!

在这种情况下,SomeType可能是participantrepository本身并未命名类型,repository<int>repository<std::string>等。接下来,您的数据成员名称不能是repository,因为这是temporary所需的模板名称。因此,请更改数据成员的名称:

private:
    repository<SomeType> repo_;

同样,您的构造函数必须采用类型:

controller(repository<participant> repo);

虽然您可能希望通过const引用传递repo

controller(const repository<participant>& repo);