非法调用非静态成员函数(C++)?

ben*_*wad 5 c++ scope

我正在开发一种基于用户控制球的游戏,该球在屏幕上的区域之间移动.屏幕的"地图"在文件ThreeDCubeGame.cpp中定义:

char m_acMapData[MAP_WIDTH][MAP_HEIGHT];
Run Code Online (Sandbox Code Playgroud)

ThreeDCubeGame.cpp处理大部分与地图有关的事情,但播放器(和键盘输入)由ThreeDCubePlayer.cpp控制.当玩家进入新的地图单元格时,游戏必须检查该单元格的内容并采取相应的行动.我正在尝试使用ThreeDCubeGame.cpp中的这个函数:

inline char GetMapEntry( int iMapX, int iMapY ) { return m_acMapData[iMapX][iMapY]; }
Run Code Online (Sandbox Code Playgroud)

因此,为了检查播放器是否被允许移动到地图单元格中,我使用来自ThreeDCubePlayer.cpp的此函数调用:

if (ThreeDCubeGame::GetMapEntry(m_iMapX+MAP_OFF_X, m_iMapY+MAP_OFF_Y) == ' ')
{
// do stuff
}
Run Code Online (Sandbox Code Playgroud)

但是,当我编译它时,我收到警告"错误C2352:'ThreeDCubeGame :: GetMapEntry':非静态成员函数的非法调用".这与变量的范围有关吗?如果不重新设计所有代码,它是否可以修复?

Did*_*set 10

class A {
  int i;
public:
  A(): i(0) {}
  int get() const { return i; }
};

int main() {
  A a;
  a.get();  // works
  A::get(); // error C2352
}
Run Code Online (Sandbox Code Playgroud)

没有用于调用该函数的对象.


Ark*_*nez 5

GetMapEntry并非static如此,如果没有ThreeDCubeGame类型的对象,则无法调用它.

替代方案:
-Make GetMapEntry static: - static inline char GetMapEntry
创建ThreeDCubeGame的实例并执行instance.GetMapEntry(