转换指向子类的指针(C++)

ben*_*wad 4 c++ pointers

我正在开发一款游戏,我需要找到一种方法来获取游戏中某个"地图块"的值(以char格式).我有一个DisplayableObject类来处理所有精灵,还有一个子类ThreeDCubePlayer来处理玩家对象.为了便于呈现/更新所有内容,所有DisplayableObject都存储在一个数组中,第0个单元格包含播放器(类型为ThreeDCubePlayer).ThreeDCubePlayer与DisplayableObject有不同的构造函数(它需要两个额外的参数),只有ThreeDCubePlayer具有我需要的GetMap()函数.所以,这是我到目前为止所做的:

ThreeDCubePlayer* cubePlayer = &((ThreeDCubePlayer &)m_ppDisplayableObjects[0]);

char mapEntry = GetMapEntry((int)*(cubePlayer->GetMapX()), (int)*(cubePlayer->GetMapY()));
Run Code Online (Sandbox Code Playgroud)

这是ThreeDCubeGame.cpp(控制地图和键盘输入的功能)的一部分.我遇到的问题是这两行都在编译时出现"非法间接"错误.我认为这个错误是当我尝试取消引用不是指针的东西时,我确信cubePlayer看起来像指针......

有没有人知道我应该做什么?

ric*_*chj 5

使用其中一种类型的安全转换,例如dynamic_cast而不是C风格的转换.

如果m_ppDisplayableObjects是DisplayableObject**,那么它看起来像这样:

ThreeDCubePlayer* cubePlayer = dynamic_cast<ThreeDCubePlayer*>(m_ppDisplayableObjects[0]);

if (cubePlayer != NULL)
{
    char mapEntry = GetMapEntry(cubePlayer->GetMapX(), cubePlayer->GetMapY());
}
else // Not a ThreeDCubePlayer* ...
Run Code Online (Sandbox Code Playgroud)