Heim >Backend-Entwicklung >C++ >Warum kann auf meine Typdefinition in einer Basisklassenvorlage in meiner abgeleiteten Klassenvorlage nicht zugegriffen werden?
Unerkannte Typedef in abgeleiteter Klassenvorlage
Bei der Deklaration einer abgeleiteten Klassenvorlage B, die von einer Basisklassenvorlage A erbt, wird erwartet, dass typedefs Das in A definierte Objekt wäre in B zugänglich. Im bereitgestellten Beispiel schlägt der Zugriff auf Vec_t in B jedoch mit der Fehlermeldung fehl, dass dies der Fall ist nicht erkannt.
Gemäß dem C-Standard (14.6.2/3) erstreckt sich die unqualifizierte Namenssuche in Klassenvorlagendefinitionen und Memberdefinitionen nicht auf Basisklassen, die von Vorlagenparametern abhängen. Dies bedeutet, dass der unqualifizierte Zugriff auf in der Basisklasse definierte Typedefs in der abgeleiteten Klassenvorlage nicht zulässig ist.
Um dieses Problem zu beheben, muss der vollständige Name der Typedef in der abgeleiteten Klassenvorlage verwendet werden. Dies kann durch explizite Angabe des Basisklassenbereichs wie folgt erreicht werden:
typename A<T>::Vec_t v;
Durch die explizite Qualifizierung des Namens mit dem Basisklassenbereich kann der Compiler den Verweis auf die in der Basisklasse definierte Vec_t-Typdefinition korrekt auflösen Vorlage.
Das obige ist der detaillierte Inhalt vonWarum kann auf meine Typdefinition in einer Basisklassenvorlage in meiner abgeleiteten Klassenvorlage nicht zugegriffen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!