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.