所以我有一个类名称存储库,它只是一个简单的数组。这是该类的一部分:
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'之前;
如何在类控制器的声明中声明存储库的类型和临时类,以便我不会得到任何其他错误?
答案 0 :(得分:4)
存储库是一个类模板,因此您需要将数据成员声明为
private:
repository<SomeType> repository; // but this hides repository name
repository<SomeType> temporary; // repository has another meaning now!
在这种情况下,SomeType
可能是participant
。 repository
本身并未命名类型,repository<int>
或repository<std::string>
等。接下来,您的数据成员名称不能是repository
,因为这是temporary
所需的模板名称。因此,请更改数据成员的名称:
private:
repository<SomeType> repo_;
同样,您的构造函数必须采用类型:
controller(repository<participant> repo);
虽然您可能希望通过const引用传递repo
:
controller(const repository<participant>& repo);