[Irrlicht, C++] Błąd kompilacji przykładu z kursu
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

[Irrlicht, C++] Błąd kompilacji przykładu z kursu

AutorWiadomość
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:

C/C++
#include <irrlicht.h>

using namespace irr;
using namespace core;
using namespace scene;
using namespace video;

// Tworzymy klase
class Klawisze
    : public IEventReceiver
{
public:
    virtual bool OnEvent( const SEvent & event )
    {
        //  Zapamiętuje położenie klawisza (klucza) (góra/dół)
        if( event.EventType == irr::EET_KEY_INPUT_EVENT )
             KeyIsDown[ event.KeyInput.Key ] = event.KeyInput.PressedDown;
       
        return false;
    }
    // Sprawdza czy klawisz (klucz) został użyty
    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:
    // Używamy by zgromadzić aktualny stan każdego klawisza (klucza)
    bool KeyIsDown[ KEY_KEY_CODES_COUNT ];
};


int main()

{
    // Tworzymy urządzenie
    Klawisze aktywne; //<--Kompilator wskazuję na błąd w tym miejscu
   
    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 ) );
   
    //Wczytywanie modelu
    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() )
   
    {
       
        //Poruszanie do przodu i do tyłu
        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 );
        }
        //Powiększanie obiektu
        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 );
        }
        //Obracanie obiektu
        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
P-39083
» 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.
P-39084
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ą?
P-39086
» 2011-08-13 16:50:01
Porównaj sobie składnię metody OnEvent z kursem dostępnym na stronie Irrlichta.

http://irrlicht.sourceforge.net/tutorials.html

/edit:
A czy Ty przypadkiem nie masz starej wersji irrlichta?
P-39087
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.
P-39095
» 2011-08-13 18:36:52
No to dostosuj kod do posiadanej wersji bądź ściągnij paczki ze strony :)
P-39106
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ć.
P-39112
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. ;[
P-39116
« 1 » 2
 Strona 1 z 2Następna strona