TenNewbie Temat założony przez niniejszego użytkownika |
[Irrlicht, C++] Błąd kompilacji przykładu z kursu » 2011-08-13 16:03:57 Witam, niedawno zacząłem się uczyć Irrlicht z kursu na tej stronię, zainstalowałem bibliotekę poprawnie ponieważ pierwszy kod mi działa. Lecz gdy doszedłem do 4 rozdziału, przy próbie kompilacji jest taki błąd: F:\Dev-Cpp\aaaaas.cpp In function `int main()': 42 F:\Dev-Cpp\aaaaas.cpp cannot declare variable `aktywne' to be of type `Klawisze' 42 F:\Dev-Cpp\aaaaas.cpp because the following virtual functions are abstract: 212 f:\Dev-Cpp\include\IEventReceiver.h virtual bool irr::IEventReceiver::OnEvent(irr::SEvent) 67 F:\Dev-Cpp\aaaaas.cpp 'class irr::scene::ISceneManager' has no member named 'loadScene' F:\Dev-Cpp\Makefile.win [Build Error] [aaaaas.o] Error 1
A kod z tego rozdziału jest tutaj: #include <irrlicht.h>
using namespace irr; using namespace core; using namespace scene; using namespace video;
class Klawisze : public IEventReceiver { public: virtual bool OnEvent( const SEvent & event ) { if( event.EventType == irr::EET_KEY_INPUT_EVENT ) KeyIsDown[ event.KeyInput.Key ] = event.KeyInput.PressedDown; return false; } virtual bool IsKeyDown( EKEY_CODE keyCode ) const { return KeyIsDown[ keyCode ]; } Klawisze() { for( u32 i = 0; i < KEY_KEY_CODES_COUNT; ++i ) KeyIsDown[ i ] = false; } private: bool KeyIsDown[ KEY_KEY_CODES_COUNT ]; };
int main()
{ Klawisze aktywne; IrrlichtDevice * device = createDevice( EDT_OPENGL, core::dimension2d < s32 >( 640, 480 ), 32, false, false, false, & aktywne ); video::IVideoDriver * video = device->getVideoDriver(); scene::ISceneManager * menage = device->getSceneManager(); scene::ICameraSceneNode * kam = menage->addCameraSceneNodeFPS(); device->getCursorControl()->setVisible( false ); kam->setPosition( core::vector3df( 0, 0, - 100 ) ); IAnimatedMesh * pudlo = menage->getMesh( "media/mesh/pudlo.md2" ); IAnimatedMeshSceneNode * pud = menage->addAnimatedMeshSceneNode( pudlo ); pud->setScale( core::vector3df( - 300, - 300, - 300 ) ); pud->setPosition( core::vector3df( 0, 0, 900 ) ); pud->setMaterialFlag( video::EMF_LIGHTING, false ); pud->setMaterialTexture( 0, video->getTexture( "media/img/pudlo.png" ) ); while( device->run() ) { if( aktywne.IsKeyDown( irr::KEY_KEY_W ) ) { core::vector3df v = pud->getPosition(); v.Z += 0.1f; pud->setPosition( v ); } else if( aktywne.IsKeyDown( irr::KEY_KEY_S ) ) { core::vector3df v = pud->getPosition(); v.Z -= 0.1f; pud->setPosition( v ); } else if( aktywne.IsKeyDown( irr::KEY_F2 ) ) { core::vector3df v = pud->getScale(); v.X -= 0.01f; v.Y -= 0.01f; v.Z -= 0.01f; pud->setScale( v ); } else if( aktywne.IsKeyDown( irr::KEY_F1 ) ) { core::vector3df v = pud->getRotation(); v.Y += 0.04f; pud->setRotation( v ); } else if( aktywne.IsKeyDown( irr::KEY_ESCAPE ) ) { device->drop(); return 0; } video->beginScene( true, true, video::SColor( 255, 0, 10, 200 ) ); menage->drawAll(); video->endScene(); } } Mój kompilator to Dev-c++. A i nie wiem czy to ma jakieś znaczenie, ale wersja biblioteki którą używam jest 1.7.2 |
|
DejaVu |
» 2011-08-13 16:05:31 Irrlicht znacząco się zmienił w stosunku do wersji, która została omówiona w kursie. Powinieneś poprawić deklarację i implementację metody OnEvent w przykładzie tak by była zgodna z obecną wersją Irrlichta. |
|
TenNewbie Temat założony przez niniejszego użytkownika |
» 2011-08-13 16:16:26 Niestety nie wiem za bardzo jak to zrobić, jest to moja pierwsza biblioteka 3d.
Trochę szkoda że poradnik nie został zaktualizowany. Ta biblioteka wydaję mi się bardzo łatwa. Przez wakacje chciałbym nauczyć się jakiejś biblioteki 3d, jeżeli nie tej, to może polecicie jakąś inną? |
|
DejaVu |
» 2011-08-13 16:50:01 |
|
TenNewbie Temat założony przez niniejszego użytkownika |
» 2011-08-13 17:25:38 A jednak nie mam wersji 1.7.2, mam o wiele starszą. Wydaję mi się że 1.3, ale niestety w dev webupdate nie ma nowszej. |
|
DejaVu |
» 2011-08-13 18:36:52 No to dostosuj kod do posiadanej wersji bądź ściągnij paczki ze strony :) |
|
TenNewbie Temat założony przez niniejszego użytkownika |
» 2011-08-13 19:22:57 eh... poddaję się, sprawdzałem ten kod na wersji 0.14 i 1.7.2 zawsze jest to samo... A nie mogę dostosować kodu ponieważ dopiero dzisiaj poznałem tą bibliotekę, i nie mam zielonego pojęcia jak to mam zrobić. |
|
TenNewbie Temat założony przez niniejszego użytkownika |
» 2011-08-14 02:44:30 Pobrałem specjalnie IDE Codeblocks, zainstalowałem bibliotekę i mam następujący błąd: ||=== test, Debug ===| C:\Documents and Settings\admin\Pulpit\test\test\main.cpp||In function `int main()':| C:\Documents and Settings\admin\Pulpit\test\test\main.cpp|12|error: invalid initialization of reference of type 'const irr::core::dimension2d<irr::u32>&' from expression of type 'irr::core::dimension2d<irr::s32>'| C:\CodeBlocks\SDK\Irrlicht\include\irrlicht.h|329|error: in passing argument 2 of `irr::IrrlichtDevice* irr::createDevice(irr::video::E_DRIVER_TYPE, const irr::core::dimension2d<irr::u32>&, irr::u32, bool, bool, bool, irr::IEventReceiver*)'| ||=== Build finished: 2 errors, 0 warnings ===| Co mam dalej robić? Bardzo mi zależy na tym. ;[ |
|
« 1 » 2 |