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
{
};
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