Vererbung innerhalb einer teplate-Klasse
-
Hallo!
template <class T> class blubb { public: class foo { public: int bla; }; class bar : public foo { public: void test() { bla; }; // error: `bla' was not declared in this scope }; };Was habe ich falsch gemacht?
-
foo ist eine (vom Templateparameter) abhängige Basis und wird daher beim unqualifizierten Namelookup nicht durchsucht. Ein qualifizierter aufruf oder ein Aufruf über this ist nötig:
void test() { foo::bla; } // oder void test() { this->bla; }Der Fall ist nicht ganz intuitiv, weil foo selbst kein Template ist; darauf kommt es aber nicht an.
-
Danke.

-
sind nun alle Klassen innerhalb Blubb von T abhänig? Bzw. kann nun in den untergeornenten Klassen mit T gearbeite werden?
-
Ja, sind sie - das siehst du spätestens wenn du den vollständigen Klassennamen aufschreibst: 'blubb**<T>**::foo'