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. 😉


  • Mod

    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 😃


Anmelden zum Antworten