2012-04-04 109 views
0

所以我有一个类名仓库这只是一个简单的array.Here是类的一部分:无效使用模板的名称不带参数列表

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

我有另一个类名为participant.I想要拥有参与者的存储库并使用名为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); 

而且我得到的错误:

(无用)使用没有参数列表的模板名称“存储库”的int临时存储库存储库和存储库的行;

-expected')'在'repo'之前与控制器(仓库repo)一致;

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

+0

欢迎去吧!如果答案有用,请标记出来。如果不是,请给出一些反馈。如果一位安抚者回答你的问题以满意,你可以接受。它使得其他人更有可能在未来回答你的问题。 – juanchopanza 2012-04-04 17:11:00

回答

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

我已经尝试过。在我输入存储库存储库后;我在类控制器中得到新的错误信息,例如:'repository controller :: repository'是私有的 和'repository controller :: repository'[-fpermissive]的声明,但是现在我得到了类存储库中的一个错误说'从'类存储库''[-fmissmiss]。'我'真的是新的编程在c + +所以我真的不知道为什么我有这个错误。 – ironflower 2012-04-04 17:51:36

+0

@ironflower你可以尝试给你的私人数据成员一个不同于“知识库”的名字吗? – juanchopanza 2012-04-04 19:07:21

+0

@ironflower我编辑了我的答案以解决名称问题。 – juanchopanza 2012-04-04 19:24:14