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