undefiniertes Element in abgeleiteter Klasse (innerhalb eines Templates)
-
Ich verstehe leider überhaupt nicht, warum der Compiler (G++ 4.4.1) bei dem folgenden Code zwei Fehler meldet:
template <class T> class A { public: class Base { public: int m_data1; int m_data2; int m_data3; int m_data4; }; class Derived : public Base { public: Derived(void) { m_data1 = 1; // geht nicht Base::m_data2 = 2; // geht m_data3 = 3; // geht nicht this->m_data4 = 4; // geht } }; }; int main(void) { A<int>::Derived d; return 0; }e.cpp: In constructor 'A<T>::Derived::Derived()':
e.cpp:17: error: 'm_data1' was not declared in this scope
e.cpp:19: error: 'm_data3' was not declared in this scopeKann mir vielleicht jemand erklären, warum das so ist, zumal die Zeilen 18 und 20 problemlos kompiliert werden.
-
der compiler ist müll
-
mittelalter schrieb:
Ich verstehe leider überhaupt nicht, warum der Compiler (G++ 4.4.1) bei dem folgenden Code zwei Fehler meldet:
Weil die Auflösung innerhalb von Templates etwas anders läuft (auch wenn man sich um diesen Fehler streiten kann), ganz davon abgesehen das ich dieses Beispiel sehr bescheiden finde. Zu aller erst sollte auch immer die Klasse, die die Member bereit stellt, sich um ihre Initialisierung sorgen (und möglichst immer unter Verwendung der Initialisierungsliste). Zum anderen ziehe ich ganze, in Klassen verschachtelte Vererbungshirachien, ohnehin stark in Zweifel. Und zu guter letzt ist "(void)" ein C-Relikt, das in C++ eher unüblich ist...