C++ Obiektowość | Dziedziczenie
Ostatnio zmodyfikowano 2011-10-31 17:55
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: 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 ) 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ę: 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ć? :] |
|
akwes |
» 2011-10-27 22:42:57 Poczytaj o funkcjach virtualnych |
|
DejaVu |
» 2011-10-27 22:47:25 Jeżeli używasz dziedziczenia i chcesz trzymać różne obiekty to:
std::vector < Obiekt *> lista; lista.push_back( new Obiekt ); lista.push_back( new InnyObiekt );
|
|
skovv Temat założony przez niniejszego użytkownika |
» 2011-10-27 23:12:22 Mam tak: 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() ) { 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 = ...
|
|
DejaVu |
» 2011-10-28 08:41:44 |
|
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. |
|
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. |
|
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 :) |
|
« 1 » 2 3 4 |