Problem mit Templates
-
Hi,
ich bin mir grade nicht ganz sicher, wie ich das zum kompilieren kriege:
template <class T> class A { public: void test() { T::B b; }; };1.c++: In member function ‘void A<T>::test()’:
1.c++:4: error: expected `;' before ‘b’Dabei weiß er ja noch gar nicht, was T eigentlich ist... Bei mir soll halt T::B ein typedef sein... Krieg ich das irgendwie so hin? Wenn ja, wie? ^^
Danke!
-
template <class T> class A { public: void test() { typename T::B b; }; };T könnte ja genauso gut ein namespace sein und B eine Funktion davon.

-
T::B ist ein vom Templateparameter abhängiger Bezeichner.
Der Compiler kann nicht wissen (solange T nicht bekannt ist), ob es sich dabei um einen Typ oder etwas anderes handelt, und nimmt daher an, dass es sich nicht um einen Typen handelt. Soll das Gegenteil gelten (= es ist ein Typ), müssen wir das dem Compiler mitteilen:template <class T> class A { public: void test() { typename T::B b; }; };
-
Danke danke für die schnellen Antworten!
Geht natürlich... Wieder was dazugelernt 