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


Anmelden zum Antworten