我正在为我的一个项目构建一个简单的游戏设计。我有以下课程:
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;
我的问题是,在任何给定时间,我都想对向量的一个元素执行一些操作。所以从向量中取出一个元素我不能直接调用该方法GetNPCState()
,因为向量中的元素是 Character* 类型的。所以这样做:
_allChar[0]->GetNPCState();
不起作用。所以我尝试用著名的 dynamic_cast 来做:
NonPlayableCharacter* test = dynamic_cast<NonPlayableCharacter*>(_allChar[0]);
test->GetNPCState();
最后一次尝试的问题是GetNPCState()
由于对象为空而崩溃,而且我知道一个事实(通过调试)_allChar[0] 不为空。