Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Virtual multiple inheritance, prosirivanje diamond shape layouta

[es] :: C/C++ programiranje :: Virtual multiple inheritance, prosirivanje diamond shape layouta

[ Pregleda: 2083 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
*.dynamic.isp.telekom.rs.

ICQ: 208550327


+14 Profil

icon Virtual multiple inheritance, prosirivanje diamond shape layouta25.07.2013. u 13:23 - pre 129 meseci
Naslov je malo neprecizan pa cu dopuniti znacenje.
Zelim da napravim hijerarhiju klasa tako sto cu koristiti virtualno nasledjivanje. U svim primerima na koje sam nailazio obicno stanu kod klase koja oznacava donji deo 'dijamanta'.
Problem je da ako zelim da nasledim iz te poslednje klase dolazi do problema.

Evo primera.

Code:


class AbstractObject
{

};

class Object : virtual public AbstractObject
{

};

class Renderable : virtual public AbstractObject
{

}

class GameActor : public Object
                       , public Renderable
{

};

class Enemy : public GameActor
{

};



Problem nastaje kada pokusam da napisem:

AbstractObject * pEnemy = new Enemy;

Kompajler mi javlja:

enemy.obj:-1: error: LNK2005: "public: __thiscall Enemy::Enemy(void)" (??0Enemy@@QAE@XZ) already defined in main.obj

Ako pokusam:

AbstractObject* pActor = new Actor,

radi lepo kao i u primerima u nekim artiklima.

Da li je uopste moguce naslediti iz klase koja predstavlja donji deo 'dijamanta' koji se formira virtuelnim naslednjivanjem (naslediti Enemy iz GameActor?)
EOF
 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
*.dynamic.isp.telekom.rs.

ICQ: 208550327


+14 Profil

icon Re: Virtual multiple inheritance, prosirivanje diamond shape layouta25.07.2013. u 14:29 - pre 129 meseci
Greska nadjena.
Imao sam Enemy klasu na jos jednom mestu u projektu i zato je prijavljivao multiple symbols.

Da tema bude koliko toliko korisna, simisao ovakve hijerarhije je da su neki objekti Renderable (Player, Creatures ili kao kod mene Enemies, Items, Obstacles, ...) a da neki nisu, objekti koji se nalaze na mapi igre ali sluze vise kao helperi, trigeri,...
Ove helpere bih izveo iz Object. Dizajnirao sam na ovakav nacin da bih slikovitije sebi predstavio hijerarhiju i malo vezbao multiple inheritance.

Ovo je moglo i na drugi nacin pomocu single hijerarhije sto je mozda laksi nacin:

Code:


// izbacujemo AbstractObject

class Object 
{

};

class Actor : public Object  // izbacujemo Renderable i podrazumevamo da su svi Actors renderable
{

};

class Enemy : public Actor
{

};

class Helper : public Object 
{

};



Kako god dizajnirao hijerarhiju, nisam siguran kako ce se odraziti na sistem kada ubacim ostale klase. Predlozi oko nekog alternativnog dizajna su dobrodosli.

EOF
 
Odgovor na temu

[es] :: C/C++ programiranje :: Virtual multiple inheritance, prosirivanje diamond shape layouta

[ Pregleda: 2083 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.