Der Aufruf des geschützten ctor der vererbenden Klasse aus der statischen Vorlagenmethode der Basisklasse schlägt fehl

8

Ich habe eine Komponentenklasse, die eine statische Vorlagenmethode definiert, wie ein Component im Allgemeinen erstellt werden sollte:

%Vor%

Dann gibt es eine Implementierung, zum Beispiel ein Button . Der Konstruktor dieser Klasse sollte nicht direkt verwendet werden, stattdessen gibt es eine statische Methode, die die Template-Funktion Component::createComponent aufruft.

%Vor%

Die Implementierung sieht so aus und übergibt den zu instanziierenden Typ und eine Konstante, die bei der Erstellung verwendet wird:

%Vor%

Nun ist das Problem, dass der Compiler sich mit "error: 'Button :: Button (uint32_t)' ist geschützt" . Zu meinem Verständnis sollte dieser Aufruf des Konstruktors OK sein, da Button erweitert Component ist, aber das scheint hier ein Problem zu sein.

Wie kann ich das lösen?

    
maxdev 17.12.2014, 15:25
quelle

3 Antworten

4

Da Ihre create() -Funktion nicht in der Lage sein wird, mit weiteren geerbten Klassen umzugehen, können Sie dies nutzen und nicht erstellen eine Button , sondern stattdessen eine generische abgeleitete, geschützte, abgeleitete Klasse, die Zugriff auf Ihren protected -Konstruktor haben würde:

%Vor%     
Dietmar Kühl 17.12.2014, 15:39
quelle
2

Der Zugriffsspezifizierer des Button-Konstruktors ist geschützt, dh es kann nur auf die von Button abgeleiteten Klassen zugegriffen werden. Wenn Sie möchten, dass Ihr Code funktioniert, müssen Sie diesen Konstruktor öffentlich machen.

    
ravi 17.12.2014 15:30
quelle
0

"Button" erweitert "Component", so dass "Button" auf geschützte Mitglieder von "Component" zugreifen kann, aber "Component" nichts über "Button" weiß und daher nicht auf seine geschützten Mitglieder zugreifen kann.

    
tipaye 17.12.2014 15:36
quelle