2012-04-04 103 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