我正在开发一个游戏,我需要找到一种方法来获取游戏中某个“ map 块”的值(以字符格式)。我有一个类 DisplayableObject 负责所有 Sprite ,还有一个子类 ThreeDCubePlayer 负责播放器对象。为了便于渲染/更新所有内容,所有 DisplayableObject 都存储在一个数组中,第 0 个单元格包含播放器(类型为 ThreeDCubePlayer)。 ThreeDCubePlayer 有一个与 DisplayableObject 不同的构造函数(它需要两个额外的参数),只有 ThreeDCubePlayer 有我需要的 GetMap() 函数。所以,这是我到目前为止所做的:

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

char mapEntry = GetMapEntry((int)*(cubePlayer->GetMapX()), (int)*(cubePlayer->GetMapY()));

这是 ThreeDCubeGame.cpp(控制 map 和键盘输入的函数)的一部分。我遇到的问题是这两行在编译时都给出了“非法间接”错误。我认为这个错误是当我尝试取消引用不是指针的东西时,我确定 cubePlayer 看起来像一个指针......

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

最佳答案

使用类型安全的强制转换之一,例如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* ...

关于c++ - 转换指向子类的指针 (C++),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1852556/

10-11 23:12