Template-Vererbungsproblem
-
Hi!
Ich habe nach einer Lösung im Forum gesucht, aber leider nichts gefunden..
Es geht um folgendes://h template <class T> class manager { public: manager(void) {} virtual ~manager(void) {} virtual void PushLoadLevel(void); virtual uint PopLoadLevel(void); protected: std::vector<T*> loaded; std::stack<uint> load_level; }; //cpp template <class T> void manager<T>::PushLoadLevel(void) { //code } //und PopLoadLevel() //andere datei #include "manager.h" namespace sfx { class system : public manager<media> { public: ~system(void); static system& GetSystem(void) { static system sys; return sys; } void PushLoadLevel(void); uint PopLoadLevel(void); private: system(void); }; } //cpp void system::PushLoadLevel(void) { manager<media>::PushLoadLevel();//<- fehler //anderer code }
Wenn ich die Push/Pop-Sachen in eine neue Klasse packe und
class manager von dieser Klasse ableite funzt alles.
Aber wie geht das ohne den Umweg einer 3. Klasse?
Mach ich vom Syntax her was falsch?[ Dieser Beitrag wurde am 25.06.2003 um 16:29 Uhr von Kane editiert. ]
-
So, mit Codetags gehts einfacher. Hat denn keiner ne' Idee?
-
Fehlermeldung bitte.
-
Wenn die Funktion virtuell ist:
sfx_system.o:[ganze andere datei]:6: undefined reference tomanager<sfx::media>::PushLoadLevel()' wenn nicht: undefined reference to
managersfx::media::PushLoadLevel()'Compiler: gcc 3.2
-
static_cast<manager<media>*>(this)->PushLoadLevel();
-
so wie du es da machst kannst du nur static Methoden aufrufen.
-
Ok, mit static gehts (Thx), aber warum ist das so?
-
Weil du mit Klasse::Methode() nur statische Funktionen aufrufen kannst.
machs lieber so:class base { doBasicStuff() { do basic work }; virtual doSpecialStuff() { doBasicStuff(); do special stuff, nur wenn Objekt vom typ base ist; }; class devired doBasicStuff() { do basic work }; virtual doSpecialStuff() { doBasicStuff(); do special stuff, nur wenn Objekt vom typ devired ist; };
[ Dieser Beitrag wurde am 25.06.2003 um 18:54 Uhr von Lars editiert. ]