我正在開發一個基於用戶控制在屏幕上的區域之間移動的球的遊戲。對於屏幕上的「地圖」在文件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