私は遭遇したトリッキーな小さな問題を抱えています。問題は私が物を投げる方法に関係していると思います。
だから私はという基本クラスを持っていcombatEntityます。以下の機能があります
class combatEntity {
public:
virtual void update();
};
次に、から派生したクラスmobがありcombatEntity、更新関数をオーバーライドします。
class mob : public combatEntity {
public:
virtual void update();
}
monster次に、update関数から派生しmob、update関数をオーバーライドするという名前のクラスがあります。
class monster: public mob {
public:
virtual void update();
}
私はcombatEntityポインタを持っていますi:
combatEntity* i;
で、〜がある:
//returns a mob* pointer (needs explicit cast)
monster* newMonster = getMob();
i = newMonster;
getMob()機能:
mob* getMob() {
mob* newMob = new mob();
//set some data in newMob
return newMob;
}
を呼び出すとi->update()、「new mob();」に設定されているmob::update()ため、新しいmobポインタを返すため、を呼び出します。を呼び出すときは、呼び出す必要がありますが、ブレークポイントを使用すると、呼び出しではなく呼び出しであることがわかります。newMonstergetMob()i->update()monster::update()mob::update()monster::update()
したがって、新しいmonsterオブジェクトを作成する必要がありますが、それでも、から返されたオブジェクトで基本クラスデータが満たされていますgetMob()が、関数は適切にオーバーライドされています。dynamic_cast、static_cast、reinterpret_castも試しましたが、どれも機能していないようです。または、派生クラスで関数を適切にオーバーライドしながら、基本クラスを派生クラスにキャストする必要があります。
うまくいけば、これは意味を成します。何かアドバイスをいただければ幸いです。