我有这样的逻辑:
GameMap
包括Player
。 Player
包括Entity
(Player
的超类)。 Entity
和Player
都使用GameMap
对象。
// GameMap.h
#pragma once
#include "Player.h"
class GameMap
{
public:
bool isTileSolid(GameMap & map, int tileX, int tileY);
};
// Player.h
#pragma once
#include "Entity.h"
class Player : public Entity
{
public:
bool collides(GameMap & map);
};
// Entity.h
#pragma once
class GameMap; // Forward declaration instead of including GameMap.h (it would not even compile)
class Entity {
};
// Player.cpp
#include "stdafx.h"
#include "Player.h"
bool Player::collides(GameMap & map)
{
if (map.isTileSolid(map, 0, 0)) // BEEP! incomplete type not allowed
return true;
return false;
}
如何让方法isTileSolid(...)
在播放器源文件中运行?我也可以为该方法做出某种前瞻性声明吗?