2016-10-29 47 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再次工作。谢谢