Program się wyłącza po kompilacji i wyskakuje błąd
Ostatnio zmodyfikowano 2014-05-23 22:28
Geniusz Temat założony przez niniejszego użytkownika |
Program się wyłącza po kompilacji i wyskakuje błąd » 2014-05-22 14:09:13 Uczę się biblioteki irrlicht i przy okazji piszę prosty program, jednak napotkałem pewien problem i nie umiem sobie z nim poradzić. Poniżej ważniejsze miejsca mojego programu. postac.h #ifndef POSTAC_H #define POSTAC_H
#include <irrlicht.h>
using namespace irr;
using namespace core; using namespace scene; using namespace video; using namespace io; using namespace gui;
class postac { public: postac(); virtual ~postac(); virtual void wykonaj_akcje() = 0; IrrlichtDevice * device; IVideoDriver * driver; ISceneManager * smgr; IGUIEnvironment * guienv; IAnimatedMesh * mesh; IAnimatedMeshSceneNode * node; ICameraSceneNode * camera; vector3df nodePosition; vector3df nodeRotation; vector3df cameraRotation; vector3df cameraTarget; vector3df cameraPosition; };
#endif
czlowiek.h #ifndef CZLOWIEK_H #define CZLOWIEK_H
#include "postac.h" #include "MyEventReceiver.h"
class czlowiek : public postac { public: czlowiek( MyEventReceiver * Receiver = 0, IrrlichtDevice * Device = 0, int ID = 0, const path & sciezka_do_pliku = "", const path & sciezka_do_tekstury = "", vector3df pozycja = vector3df( 0, 0, 0 ), unsigned int Zycie = 100, unsigned int Zrecznosc = 10 ); virtual ~czlowiek(); void wykonaj_akcje(); MyEventReceiver * receiver; position2d < s32 > LastMousePosition; position2d < s32 > NowMousePosition; };
#endif
main.cpp #include "irrlicht.h"
using namespace irr;
using namespace core; using namespace scene; using namespace video; using namespace io; using namespace gui;
#include "MyEventReceiver.h" #include "czlowiek.h"
int main( int argc, char ** argv ) { MyEventReceiver receiver; IrrlichtDevice * device = createDevice( EDT_SOFTWARE, dimension2d < u32 >( 640, 480 ), 16, false, false, false, & receiver ); IVideoDriver * driver = device->getVideoDriver(); ISceneManager * smgr = device->getSceneManager(); IGUIEnvironment * guienv = device->getGUIEnvironment(); postac * wsk; { czlowiek clwk( & receiver, device, 1, "../../media/sydney.md2", "../../media/sydney.bmp" ); wsk = & clwk; } while( device->run() ) { wsk->wykonaj_akcje(); driver->beginScene( true, true, SColor( 0, 200, 200, 200 ) ); smgr->drawAll(); guienv->drawAll(); driver->endScene(); } device->drop(); return 0; }
Program się kompiluje, jednak od razu się wyłącza, a w logu kompilacji pojawia się coś takiego : Irrlicht Engine version 1.8.1 Microsoft Windows XP Professional Dodatek Service Pack 3 (Build 2600) Resizing window (640 480) Loaded mesh: ../../media/sydney.md2 Loaded texture: C:/Documents and Settings/Admin/Pulpit/Irrlicht/irrlicht-1.8.1/m edia/sydney.bmp pure virtual method called terminate called without an active exception
This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information.
Process returned 3 (0x3) execution time : 0.125 s Press any key to continue.
I moje pytanie - dlaczego wyskakuje ten błąd i co robię źle ? |
|
kubawal |
» 2014-05-22 14:16:20 Nie możesz używać wskaźnika do zmiennej w innym zakresie. Alokuj go dynamicznie (new)
/edit: Swoją drogą, dziwne że taki błąd wyskakuje. W takich przypadkach zazwyczaj wyrzuca SEGFAULT albo Acess violation reading location... |
|
Monika90 |
» 2014-05-22 14:17:33 /edit: Swoją drogą, dziwne że taki błąd wyskakuje. W takich przypadkach zazwyczaj wyrzuca SEGFAULT albo Acess violation reading location...
|
Destruktor klasy czlowiek ustawia vptr na vtable klasy podstawowej |
|
Geniusz Temat założony przez niniejszego użytkownika |
» 2014-05-23 22:28:01 Dziękuję za pomoc. Wszystko działa jak należy. |
|
« 1 » |