Problem Template Vererbung



  • Ich habe folgendes Problem:
    Ein Template und eine Klasse, die von diesem Template erbt...

    class Something{/*...*/};
    class Anything{/*...*/};
    
    template<class T,class TC> class Base{
      protected:
        void Add(TC* Obj);
    
        //...
    };
    
    class MyClass : public Base<Something,Anything>{
      public:
        void Add(Anything* Obj);
        //...
    }
    

    Nun will ich die Funktion Add von einem MyClass Objekt aufrufen:

    MyClass *Test = new MyClass();
      Test->Add(new Anything());
    

    Ich bekomme jedoch immer eine unresolved external...
    Kann mir jemand einen Tipp geben wieso ich die vom Template geerbte Funktion nicht aufrufen kann?



  • PS: Die Funktion Add ist so implementiert:

    template <class T,class TC> void Base<T,TC>::AddCondition(TC *Obj)
    {
      //...
    }
    


  • __gast schrieb:

    PS: Die Funktion Add ist so implementiert:

    (Ich nehme an, das "AddCondition" ist ein Tippfehler)

    Das ist Base::Add, was ist mit MyClass::Add?



  • MFK schrieb:

    (Ich nehme an, das "AddCondition" ist ein Tippfehler)

    Richtig 😉

    Das ist Base::Add, was ist mit MyClass::Add?

    Diese Funktion soll vom Template geerbt werden. Geht das nicht indem ich sie einfach als

    void Add(Anything* Obj);
    

    in die Deklaration von MyClass schreibe? Alle von Base abgeleiteten Klassen sollen diese Funktion besitzen. Und zwar so wie sie Base::Add definiert!



  • __gast schrieb:

    Diese Funktion soll vom Template geerbt werden. Geht das nicht indem ich sie einfach als

    void Add(Anything* Obj);
    

    in die Deklaration von MyClass schreibe? Alle von Base abgeleiteten Klassen sollen diese Funktion besitzen. Und zwar so wie sie Base::Add definiert!

    Das passiert schon ganz automatisch. Aber wenn du sie in MyClass nochmals deklarierst, dann überschreibst du damit die Methode der Basisklasse.



  • Uhuuu... das ergibt Sinn! Werde das zu Hause testen. Vielen Danke...



  • Man kann die Methode aus der Basisklasse mit einem using Base::Add; doch wieder sichtbar machen.


Anmelden zum Antworten