0

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

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

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

这是课堂参与者的一部分:

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);

我得到了错误:

- 在存储库存储库和存储库临时行中,没有参数列表的模板名称“存储库”的使用无效;

- 与控制器(存储库 repo)一致的“repo”之前的预期“)”;

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

4

1 回答 1

4

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

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);

尽管您可能想repo通过 const 引用传递:

controller(const repository<participant>& repo);
于 2012-04-04T10:00:52.660 回答