无效使用没有参数列表的模板名称

invalid use of template-name without an argument list

本文关键字:列表 参数 无效      更新时间:2023-10-16

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

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

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

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

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 repository和repository temporary的行中无效使用模板名称"repository"而没有参数列表;

-与控制方一致的"回购"之前应为")"(存储库回购);

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

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

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

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

private:
    repository<SomeType> repo_;

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

controller(repository<participant> repo);

尽管您可能希望通过常量引用传递repo

controller(const repository<participant>& repo);