2016-10-29 11 views
1

ちょっと、C++で学校プロジェクトとしてゲームを作成していて、子クラスから親クラスのインスタンスを取得しようとしています。私はクラスを作成しましたCollisionHandlerの魔法使いは、コールバックまたはイベントリスナーとして動作します。これは最近まで働いていましたが、私のコードのいくつかの変更の後に、私はそれを再び働かせることができません....これを行う適切な方法は何ですか? CollisionHandlerを実装C++子から親のインスタンスを取得

class CollisionHandler{ 
public: 
    explicit CollisionHandler(){}; 
    ~CollisionHandler(){}; 
    virtual Collision checkWorldCollision(sf::FloatRect playerPos); 
    virtual Collision checkPlayerCollision(sf::FloatRect attackPos); 
}; 

クラス:

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: ‘CollisionHandler’ has not been declared 
void setCollisionHandler(CollisionHandler* collisionHandler); 

すべてのバック申し訳ありませんと述べたが、私はすべてが含まれているにもかかわらず、宣言エラーと、それを絞り込んています:

error: no matching function for call to ‘Player::initialize(PlayerInfo&, Game*)’ 
player.initialize(info, &game); 

はまた、このエラーを取得

+0

それは少し不明だと思ったが、私の主な質問は、どのようにC + +の継承とinstanciationに対処するですか? – SlyOtis

+0

あなたのポストにない 'Player'クラスのコンパイルエラーです。署名は発信者と着信者の間で一致しません。 – Franck

+0

GameクラスをJustとInstance of CollisionHandlerに置き換えると、すべて正常に動作しますが、それが役立つ場合は、さらにコードを投稿できます:P – SlyOtis

答えて

0

何が起こったのか分かりませんが、何かが見つかりましたhere

そして、CollisionHandlerの新しいファイルとインスタンスが作成されました。 gが再び働いています。ありがとう

関連する問題