Heim > Backend-Entwicklung > C++ > Hauptteil

Warum kann ich mit GCC nicht auf Basisklassenmitglieder in einer von einer Vorlage abgeleiteten Klasse zugreifen?

Mary-Kate Olsen
Freigeben: 2024-11-02 16:08:02
Original
988 Leute haben es durchsucht

Why Can't I Access Base Class Members in a Template-Derived Class with GCC?

GCC-Kompilierungsfehler: Zugriff auf Basisklassenmitglied abhängig vom Vorlagenargument

In C wird beim Erben von einer Vorlagenklasse der Zugriff auf Mitglieder der Basisklasse innerhalb der abgeleiteten Klasse kann manchmal eine Herausforderung darstellen, wie dieser Benutzer erlebt hat. Es wird ein Codeausschnitt bereitgestellt:

<code class="cpp">template <typename T> class A {
public:
    T foo;
};

template <typename T> class B: public A<T> {
public:
    void bar() { cout << foo << endl; }
};</code>
Nach dem Login kopieren

Beim Kompilieren dieses Codes mit GCC stößt der Benutzer auf den Fehler:

error: ‘foo’ was not declared in this scope
Nach dem Login kopieren

Das problematische Mitglied „foo“ sollte jedoch innerhalb von zugänglich sein abgeleitete Klasse.

Das Problem ergibt sich aus der Tatsache, dass der Compiler in C 11 und höher nicht mehr automatisch die Variablentypen in verschachtelten Vorlagen ableiten darf. Diese Einschränkung verhindert, dass der Compiler beim Kompilieren der abgeleiteten Klasse auf die Existenz des „foo“-Mitglieds in der Basisklasse schließt.

Um das Problem zu beheben, kann auf das Mitglied explizit über den Basisklassennamen zugegriffen werden:

<code class="cpp">void bar() { cout << A<T>::foo << endl; }
Nach dem Login kopieren

Alternativ kann der Zeiger „this“ verwendet werden:

<code class="cpp">void bar() { cout << this->foo << endl; }</code>
Nach dem Login kopieren

Diese Lösungen geben explizit an, dass das Mitglied „foo“ zur Basisklasse gehört, und stellen so sicher, dass der Compiler es korrekt identifizieren kann und klären Sie die Verwendung.

Das obige ist der detaillierte Inhalt vonWarum kann ich mit GCC nicht auf Basisklassenmitglieder in einer von einer Vorlage abgeleiteten Klasse zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage