Pure virtual function call!?
-
Ich hab zwei Klassen:
/////////////////////////////////////////////////////////// // AI_Handler ///////////////////////////////////////////// /////////////////////////////////////////////////////////// class AI_Handler : public omeMemoryObject { public: AI_Handler( int nNr ) { m_nNr = nNr; m_HandlerList.push_back(this); } virtual ~AI_Handler() { } virtual void Init() = 0; virtual void Tick() = 0; virtual void Release() = 0; static void InitAI() { std::list<omeSmartPointer<AI_Handler> >::iterator it; for (it=m_HandlerList.begin(); it != m_HandlerList.end(); ) (*it)->Init(); } static void DoAI() { std::list<omeSmartPointer<AI_Handler> >::iterator it; for (it=m_HandlerList.begin(); it != m_HandlerList.end(); ) (*it)->Tick(); } static void ReleaseAI() { std::list<omeSmartPointer<AI_Handler> >::iterator it; for (it=m_HandlerList.begin(); it != m_HandlerList.end(); ) (*it)->Release(); } protected: static std::list<omeSmartPointer<AI_Handler> > m_HandlerList; int m_nNr; }; std::list<omeSmartPointer<AI_Handler> > AI_Handler::m_HandlerList; /////////////////////////////////////////////////////////// // AI_Handler1 //////////////////////////////////////////// /////////////////////////////////////////////////////////// class AI_Handler1 : public AI_Handler { public: AI_Handler1( int nNr ) : AI_Handler(nNr) { } void Init() { } void Tick() { MoveObject(m_nNr, 0.2f, 0.0f, 0.0f); } void Release() { } unsigned long size() { return sizeof(*this); } };
Wenn ich jetzt mit
new AI_Handler1(2);
einen Handler erstelle, dann bricht das Programm ab und meldet mir einen Laufzeitfehler wegen eines Pure virtual function calls.
Woran liegt das?
Mfg, smasher1985
-
bist du ganz sicher, dass der fehler nicht in omeMemoryObject liegt?
-
ja bin mir ganz sicher, da ich omeMemoryObject schon etwas tausend mal benutzt habe und es nie Probleme damit gab. Außerdem enthält omeMemoryObject gar keine virtuellen Funktionen.
Mfg, smasher1985
-
OK, ich muss zugeben, dass der Fehler doch in omeMemoryObject liegen muss. Hab das jetzt mal weggelassen und statt der SmartPointer normale Zeiger verwendet und jetzt funktionierts
Also, tut mir leid, dass ich euch unnötig belästigt hab...
Mfg, smasher1985