Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

C++ Obiektowość | Dziedziczenie

Ostatnio zmodyfikowano 2011-10-31 17:55
Autor Wiadomość
skovv
Temat założony przez niniejszego użytkownika
C++ Obiektowość | Dziedziczenie
» 2011-10-27 22:24:29
Witam. Piszę sobie mini silniczek obiektowy. Mam klasę obiektu w której zapakowane są wszystkie funkcje:
C/C++
class OBJECT
{
public:
    int X;
    int Y;
    int W;
    int H;
    BITMAP * Sprite;
   
    OBJECT()
    {
        X = 0;
        Y = 0;
        W = 0;
        H = 0;
        Sprite = NULL;
    }
    void Create();
    void Destroy();
    void Draw();
    void SpriteLoad( char * sciezka )
    {
        ...
    }
    void SpriteFree()
    {
        ...
    }
    void SpriteDraw()
    {
        ...
    }
};
w oparciu o tą klase zamierzam tworzyć wszystkie obiekty w grze( oto pierwszy z nich )
C/C++
class GRACZ
    : public OBJECT
{
public:
   
    GRACZ( int x = 0, int y = 0 )
    {
        X = x;
        Y = y;
    }
    void Create()
    {
        SpriteLoad( "C:\\gracz.bmp" );
    }
    void Destroy()
    {
        SpriteFree();
    }
    void Draw()
    {
        SpriteDraw();
    }
};

Mam jednak mały kłopot z listą obiektów, mianowicie stworzyłem sobie klasę:
C/C++
class OBJECTS
{
public:
    list < OBJECT > Obj;
    list < OBJECT >::iterator pos;
   
    void Add( OBJECT * Objekt )
    {
        Obj.push_back( * Objekt );
        cout << "dodano objekt\n";
    }
    void Create()
    {
        if( !Obj.empty() )
        {
            pos = Obj.begin();
            while( pos != Obj.end() )
            {
                pos->Create();
                cout << "Utworzono Obiekt\n";
                pos++;
            }
        }
    }
    void Destroy()
    {
        ...
    }
    void Draw()
    {
        ...
    }
};

Problem w tym że nie wykonuje się kod z klasy GRACZ( i innych z testowej aplikacji ) a ten który jest standardowo w klasie OBJECT. Można to jakoś naprawić? :]
P-42883
akwes
» 2011-10-27 22:42:57
Poczytaj o funkcjach virtualnych
P-42884
DejaVu
» 2011-10-27 22:47:25
Jeżeli używasz dziedziczenia i chcesz trzymać różne obiekty to:
C/C++
std::vector < Obiekt *> lista;
lista.push_back( new Obiekt );
lista.push_back( new InnyObiekt );
P-42885
skovv
Temat założony przez niniejszego użytkownika
» 2011-10-27 23:12:22
Mam tak:
C/C++
class OBJECTS
{
public:
    std::vector < OBJECT *> Obj;
    std::vector < OBJECT *>::iterator pos;
   
    void Add( OBJECT * ooo )
    {
        Obj.push_back( ooo );
        cout << "dodano objekt\n";
    }
    void Create()
    {
        if( !Obj.empty() ) //if( !Obj.empty( ) )
        {
            pos = Obj.begin();
            while( pos != Obj.end() )
            {
                pos->Create();
                cout << "Utworzono Obiekt\n";
                pos++;
            }
        }
    }
    //...
I wyskakują mi błędy:

1 C:\Documents and Settings\Skovv\Pulpit\ObjEngine\main.cpp In file included from main.cpp
C:\Documents and Settings\Skovv\Pulpit\ObjEngine\ObjEngine.h In member function `void OBJECTS::Create()':
102 C:\Documents and Settings\Skovv\Pulpit\ObjEngine\ObjEngine.h request for member `Create' in `*(((__gnu_cxx::__normal_iterator<OBJECT**, std::vector<OBJECT*, std::allocator<OBJECT*> > >*)((OBJECTS*)this)) + 12u)->__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator-> [with _Iterator = OBJECT**, _Container =
...
P-42892
DejaVu
» 2011-10-28 08:41:44
Zamień:
C/C++
pos->Create();
Na:
C/C++
( * pos )->Create();
P-42899
skovv
Temat założony przez niniejszego użytkownika
» 2011-10-28 11:28:08
Dalej to samo - kod pobiera z klasy OBJECT a nie zmodyfikowany z GRACZ.
P-42907
DejaVu
» 2011-10-28 11:29:46
Dopisz słowo virtual w klasie bazowej przed każdą metodą, która może być nadpisana w klasie pochodnej.
P-42908
skovv
Temat założony przez niniejszego użytkownika
» 2011-10-28 11:39:05
Suuper, działa :D Dzięki ci wielkie za pomoc :)
P-42910
« 1 » 2 3 4
  Strona 1 z 4 Następna strona