1
嘿,我正在用C++创建一个游戏作为学校项目,并试图从孩子类中获得父类的实例。我创建了一个CollisionHandler类作为回调或事件侦听器类。这工作,直到最近,但在我的代码的一些变化后,我不能让它再次工作....什么是正确的方法来做到这一点?C++从孩子获得父母的实例
class CollisionHandler{
public:
explicit CollisionHandler(){};
~CollisionHandler(){};
virtual Collision checkWorldCollision(sf::FloatRect playerPos);
virtual Collision checkPlayerCollision(sf::FloatRect attackPos);
};
类实现CollisionHandler:
class Game : public CollisionHandler{
public:
Game();
~Game();
enum GameType{
TYPE_LOCAL,
TYPE_LAN
};
enum GameState{
PLAYING,
PAUSED,
ENDED
};
void initialize(int width, int height, Map map, GameType type);
void addPlayer(PlayerInfo& playerInfo, PlayerControls playerControls);
RunState start(sf::RenderWindow& window);
RunState resume(sf::RenderWindow& window);
void pause();
void exit();
Collision checkWorldCollision(sf::FloatRect playerPos);
Collision checkPlayerCollision(sf::FloatRect attackPos);
private:
RunState run(sf::RenderWindow& window);
GameState _currState;
World _world;
GameType _gameType;
std::vector<Player> _players;
int playerAmount;
};
然后我初始化使用游戏作为的CallbackHandler类球员:
player.initialize(info, &game);
一切运行良好,直到最近,但绝不应影响到这部分的代码。收到此错误:
error: no matching function for call to ‘Player::initialize(PlayerInfo&, Game*)’
player.initialize(info, &game);
还收到此错误:
error: ‘CollisionHandler’ has not been declared
void setCollisionHandler(CollisionHandler* collisionHandler);
对不起,所有的奔波,但我已经把范围缩小是,即使一切都包含一个声明错误:
所以认为它有点不清楚,但我的主要问题是,如何处理C++中的继承和instanciation? – SlyOtis
这是''Player'类中的一个编译错误,它不在您的文章中。主叫方和被叫方之间的签名不匹配。 – Franck
如果我只用CollisionHandler实例替换Game类,一切正常,但可以发布更多我的代码,如果这会帮助:P – SlyOtis