2012-04-04 3 views
0

Also ich einen Klassennamen Repository haben, die nur eine einfache array.Here ist, ist ein Teil der Klasse:ungültige Verwendung von Template-Namen ohne Argument Liste

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

Ich habe eine andere Klasse mit dem Namen participant.I Ich möchte ein Repository von Teilnehmern haben und Aktionen für dieses Repository mit einer neuen Klasse namens controller ausführen. Aber ich weiß nicht, wie ich den Typ des Repositorys im Controller deklariere.

Hier ist ein Teil der Klasse Teilnehmer:

class participant { 
private: 
    int position; 
    int score; 

Und hier ist ein Teil aus der Klasse Controller:

#include "repository.h" 
#include "participant.h" 
class controller { 
private: 
    repository repository; 
    repository temporary; 
    void createCopy(); 
public: 
    controller(); 
    controller(repository repo); 

Und ich bekomme die Fehler:

-invalid Einsatz des Vorlagennamens 'repository' ohne eine Argumentliste in den Zeilen mit repository repository und repository temporary;

-erwartete ')' vor 'Repo' in der Zeile mit Controller (Repository Repo);

Wie soll ich den Typ für das Repository und temporär in der Deklaration des Klassencontrollers deklarieren, damit ich keine weiteren Fehler bekomme?

+0

willkommen zu SO! Wenn Antworten hilfreich sind, markieren Sie sie bitte. Wenn nicht, dann geben Sie bitte ein Feedback. Wenn ein Antworter Ihre Frage zu Ihrer Zufriedenheit beantwortet, können Sie diese akzeptieren. Es macht es wahrscheinlicher, dass andere Ihre Fragen in Zukunft beantworten werden. – juanchopanza

Antwort

4

Repository ist eine Klasse-Vorlage, so dass Sie benötigen, um Ihre Datenelemente als

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

wo SomeType in diesem Fall wahrscheinlich participant ist zu erklären. repository selbst nennt keinen Typ, repository<int> oder repository<std::string> usw. tut. Als Nächstes kann der Name Ihres Datenelements nicht repository lauten, da dies der Vorlagenname ist, der für temporary benötigt wird. So ändern Sie den Namen des Datenelements:

private: 
    repository<SomeType> repo_; 

Ebenso Konstruktor muss eine Art nehmen:

controller(repository<participant> repo); 

obwohl Sie wahrscheinlich repo durch konstante Referenz übergeben möchten:

controller(const repository<participant>& repo); 
+0

Ich habe das schon ausprobiert.nach dem ich Repository Repository eingeben; Ich bekomme neue Fehlermeldungen in der Klasse Controller wie: 'Repository Controller :: Repository' ist privat und Deklaration von 'Repository Controller :: Repository' [-fpermissive], aber auch ich bekomme jetzt einen Fehler im Klassen-Repository Das ändert die Bedeutung von 'Repository' von 'Klassenrepository ' [-fmissiv]. Ich bin wirklich neu in der Programmierung in C++, also weiß ich wirklich nicht, warum ich diese Fehler habe. – ironflower

+0

@ironflower können Sie versuchen, Ihrem privaten Datenmitglied einen anderen Namen als "Repository" zu geben? – juanchopanza

+0

@ironflower Ich habe meine Antwort bearbeitet, um das Namensproblem zu beheben. – juanchopanza

Verwandte Themen