Heim  >  Artikel  >  Backend-Entwicklung  >  Warum kann ich mit GCC nicht auf Basisklassenmitglieder in einer Vorlagenfunktion zugreifen?

Warum kann ich mit GCC nicht auf Basisklassenmitglieder in einer Vorlagenfunktion zugreifen?

Susan Sarandon
Susan SarandonOriginal
2024-11-01 15:50:02941Durchsuche

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

Verwenden eines Basisklassenmitglieds in einer Vorlage

Der bereitgestellte Code kann mit GCC nicht kompiliert werden, funktioniert aber mit Visual Studio. Beim Versuch, auf das foo-Mitglied der Basisklasse in der bar-Funktion zuzugreifen, stößt GCC auf einen Fehler, der besagt, dass foo nicht im aktuellen Bereich deklariert ist.

Gemäß den offiziellen C-Spezifikationen hält sich GCC an bestimmte Regeln Verhindern Sie, dass der Compiler die Mitglieder der Basisklasse ableitet, wenn die Basisklasse eine Vorlagenklasse ist. Dies liegt daran, dass der Compiler ohne direkte Kenntnis der Definition der Basisklasse deren Mitglieder nicht bestimmen kann.

Um dieses Problem zu beheben, gibt es zwei Möglichkeiten:

  1. Verwenden Sie den Zeiger this auf Greifen Sie explizit auf das Basisklassenmitglied zu:
<code class="cpp">void bar() { cout << this->foo << endl; }
  1. Geben Sie den Basisklassennamen explizit an:
<code class="cpp">void bar() { cout << A<T>::foo << endl; }

Dadurch kann GCC das foo-Mitglied als erkennen gehört zur Basisklasse A.

Daher lautet die korrekte Syntax für den Zugriff auf Basisklassenmitglieder in einer Vorlagenklasse this->foo oder A::foo.

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

Stellungnahme:
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