Mitgliedsvariablen der übergeordneten Klasse sind in der geerbten Klasse nicht sichtbar
Beim Erben einer Klasse als Vorlage sind geschützte Variablen der übergeordneten Klasse möglicherweise nicht sichtbar in der geerbten Klasse sichtbar. Dies kann beim Zugriff auf diese Variablen in der geerbten Klasse zu Kompilierungsfehlern führen.
Betrachten Sie das folgende Beispiel:
<code class="cpp">// Parent class template <class elemType> class arrayListType { protected: elemType *list; int length; // ... }; // Inherited class template <class elemType> class unorderedArrayListType: public arrayListType<elemType> { public: void insertAt(int location, const elemType& insertItem); // ... };</code>
Wenn der Compiler auf die Klasse „unorderedArrayListType“ stößt, versucht er, die Funktion „insertAt“ zu validieren . Die in der Klasse arrayListType deklarierten Längen- und Listenvariablen können jedoch nicht gefunden werden. Dies führt zu Kompilierungsfehlern.
Lösung
Um dieses Problem zu beheben, gibt es zwei mögliche Lösungen:
1. Stellen Sie this-> als Präfix voran
Den geerbten Variablen wird this-> vorangestellt. Gibt explizit an, dass sie zur übergeordneten Klasse gehören:
<code class="cpp">// Inherited class template <class elemType> class unorderedArrayListType: public arrayListType<elemType> { public: void insertAt(int location, const elemType& insertItem) { this->length++; // ... } // ... };</code>
2. Deklarationen verwenden
Deklarieren der geerbten Variablen im privaten Abschnitt der geerbten Klasse:
<code class="cpp">// Inherited class template <class elemType> class unorderedArrayListType: public arrayListType<elemType> { private: using arrayListType<elemType>::length; using arrayListType<elemType>::list; public: void insertAt(int location, const elemType& insertItem) { length++; // ... } // ... };</code>
Beide Methoden stellen sicher, dass der Compiler explizit versteht, dass die geerbten Variablen von der übergeordneten Klasse stammen .
Das obige ist der detaillierte Inhalt vonWarum kann ich in meiner geerbten Klasse nicht auf die Mitgliedsvariablen der übergeordneten Klasse zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!