Heim > Backend-Entwicklung > C++ > Warum gibt GCC beim Zugriff auf Basisklassenmitglieder in einer Vorlage einen Fehler „Nicht deklariert' aus?

Warum gibt GCC beim Zugriff auf Basisklassenmitglieder in einer Vorlage einen Fehler „Nicht deklariert' aus?

Patricia Arquette
Freigeben: 2024-11-02 11:15:02
Original
602 Leute haben es durchsucht

Why Does GCC Throw a

GCC-Falle: Zugriff auf Basisklassenmitglieder mit Abhängigkeit von Vorlagenargumenten

Dieser Code weist einen rätselhaften Kompilierungsfehler in GCC auf, funktioniert aber in Visual Studio:

template <typename T> class A {
public:
    T foo;
};

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

GCC löst einen Fehler aus: „foo‘ wurde in diesem Bereich nicht deklariert“, obwohl es Mitglied der Basisklasse ist. Das Problem wird jedoch behoben, indem der Code so geändert wird, dass er explizit über „this->foo“ auf das Basisklassenmitglied verweist.

Erklärung

GCC folgt dem C-Standard, der verbietet die Schlussfolgerung von Basisklassenmitgliedern während der Vorlagenkompilierung. In früheren Versionen leitete GCC Mitglieder durch Parsen der Basisklasse ab, was jedoch zu Konflikten führen konnte.

Um dieses Problem zu beheben, stellen Sie expliziten Zugriff auf Basisklassenmitglieder in Vorlagen sicher:

  • Verwenden Sie „this“, um auf das Mitglied zu verweisen:

    void bar() { cout << this->foo << endl; }
    Nach dem Login kopieren
  • Geben Sie den Namen der Basisklasse an:

    void bar() { cout << A<T>::foo << endl; }
    Nach dem Login kopieren

Durch Einhaltung Mithilfe dieser Richtlinien können Entwickler Kompilierungsfehler verhindern und sicherstellen, dass GCC den Zugriff auf Basisklassenmitglieder wie in den Vorlagen vorgesehen handhabt. Weitere Details finden Sie im GCC-Handbuch.

Das obige ist der detaillierte Inhalt vonWarum gibt GCC beim Zugriff auf Basisklassenmitglieder in einer Vorlage einen Fehler „Nicht deklariert' aus?. 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