Heim > Backend-Entwicklung > C++ > Hauptteil

Warum erkennt GCC Basisklassenmitglieder in Vorlagenklassen nicht?

Barbara Streisand
Freigeben: 2024-11-02 17:12:02
Original
426 Leute haben es durchsucht

Why Does GCC Fail to Recognize Base Class Members in Template Classes?

GCC-Kompilierungsproblem: Zugänglichkeit von Basisklassenmitgliedern in Vorlagenklassen

Beim Kompilieren von Vorlagenklassenhierarchien stößt GCC manchmal auf Fehler, die nicht auftreten in anderen Compilern. Ein solcher Fehler tritt auf, wenn versucht wird, auf ein Mitglied einer Basisklasse zuzugreifen, die von einem Vorlagenargument abhängt.

Beachten Sie den folgenden Codeausschnitt:

<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; } // Error in GCC
};
Nach dem Login kopieren

Das Kompilieren dieses Codes mit GCC erzeugt den Fehler :

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

Trotz der logischen Existenz des foo-Mitglieds in der Basisklasse erkennt GCC es nicht, ohne die Basisklasse explizit anzugeben oder den Zeiger this zu verwenden. Diese Diskrepanz ist auf eine frühere Version der C-Spezifikation zurückzuführen, die den Rückschluss auf Basisklassenmitglieder durch Parsen ermöglichte. Nachfolgende Aktualisierungen der Spezifikation haben jedoch klargestellt, dass eine solche Schlussfolgerung zu Konflikten führen kann.

Um dieses Problem zu beheben, gibt es zwei empfohlene Ansätze:

  1. Verwenden Sie den Zeiger „this“, um auf die Basis zuzugreifen Klassenmitglied:
<code class="cpp">void bar() { cout << this->foo << endl; }</code>
Nach dem Login kopieren
  1. Referenzieren Sie explizit auf die Basisklasse im Mitgliedszugriff:
<code class="cpp">void bar() { cout << A<T>::foo << endl; }</code>
Nach dem Login kopieren

Dieses Verhalten ist im GCC-Handbuch dokumentiert, das Bietet zusätzliche Informationen zur Lösung ähnlicher Probleme. Mithilfe dieser Techniken können Entwickler die erfolgreiche Kompilierung von Vorlagenklassenhierarchien mit Elementabhängigkeiten sicherstellen.

Das obige ist der detaillierte Inhalt vonWarum erkennt GCC Basisklassenmitglieder in Vorlagenklassen nicht?. 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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!