私は自分のプロジェクトのためにシンプルなゲームデザインを構築しています。私は次のクラスを持っています:
class Character
{
public:
virtual void Display();
virtual void SetParameters( char* param, ... );
};
class NonPlayableCharacter : public Character
{
public:
virtual void Display();
virtual void SetParameters( char* paaram, ... );
int GetNPCState();
}
そして、CharacterまたはNonPlayableCharacterのいずれかから派生したクラスがたくさんあります。私はそれを次のように定義します:
std::vector<Character*> _allChar;
私の問題は、いつでもベクトルの要素の1つに対して何らかの操作を実行したいということです。GetNPCState()
したがって、ベクトルから要素を取得することは、ベクトル内の要素がCharacter *タイプであるため、メソッドを直接呼び出すことはできません。だからこれを行う:
_allChar[0]->GetNPCState();
動作しません。だから私は有名なdynamic_castでそれをやってみました:
NonPlayableCharacter* test = dynamic_cast<NonPlayableCharacter*>(_allChar[0]);
test->GetNPCState();
この最後の試みの問題はGetNPCState()
、オブジェクトがnullであるためにクラッシュすることです。また、(デバッグを介して)_allChar[0]がnullではないことを知っています。