2016-10-29 46 views
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); 

對不起,所有的奔波,但我已經把範圍縮小是,即使一切都包含一個聲明錯誤:

+0

所以認爲它有點不清楚,但我的主要問題是,如何處理C++中的繼承和instanciation? – SlyOtis

+0

這是''Player'類中的一個編譯錯誤,它不在您的文章中。主叫方和被叫方之間的簽名不匹配。 – Franck

+0

如果我只用CollisionHandler實例替換Game類,一切正常,但可以發佈更多我的代碼,如果這會幫助:P – SlyOtis

回答

0

聲明錯誤,不知道發生了什麼,但發現了一些東西here

並創建了一個新的CollisionHandler文件和實例,everythin g再次工作。謝謝