我正在开发一个基于用户控制在屏幕上的区域之间移动的球的游戏。对于屏幕上的“地图”在文件ThreeDCubeGame.cpp定义:非法调用非静态成员函数(C++)?
char m_acMapData[MAP_WIDTH][MAP_HEIGHT];
的ThreeDCubeGame.cpp处理大部分的东西与地图做的,但球员(和键盘输入)由ThreeDCubePlayer控制的.cpp。当玩家进入新的地图单元格时,游戏必须检查该单元格的内容并采取相应的行动。此功能在ThreeDCubeGame.cpp是什么,我想使用:
inline char GetMapEntry(int iMapX, int iMapY) { return m_acMapData[iMapX][iMapY]; }
因此,以检查球员是否准予迁入我用这个函数调用从ThreeDCubePlayer.cpp映射单元:
if (ThreeDCubeGame::GetMapEntry(m_iMapX+MAP_OFF_X, m_iMapY+MAP_OFF_Y) == ' ')
{
// do stuff
}
但是,当我编译这个,我得到警告“错误C2352:'ThreeDCubeGame :: GetMapEntry':非法调用非静态成员函数”。这与变量的范围有关吗?它是否可修复而不重新设计所有代码?
感谢您的回答。 在我的程序中ThreeDCubePlayer是ThreeDCubeGame中的一个实例 - 这是否意味着我可以在ThreeDCubePlayer中创建一个ThreeDCubeGame的实例来引用相同的二维数组? – benwad 2009-12-04 14:06:34
你可以使用ThreeDCubePlayer.GetMapEntry(或this-> GetMapEntry(从内部。 – 2009-12-04 14:08:15