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:
<code class="cpp">void bar() { cout << this->foo << endl; }
<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 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!