2016-10-29 8 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: 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

그래서 조금 명확하지 않지만 내 주요 질문은 어떻게 상속과 instanciation C + +로 처리하는 것입니다? – SlyOtis

+0

귀하의 게시물에없는'Player' 클래스의 컴파일 오류입니다. 서명은 발신자와 수신자가 일치하지 않습니다. – Franck

+0

Game 클래스를 Just와 CollisionHandler의 인스턴스로 대체하면 모든 것이 잘 작동하지만 도움이된다면 내 코드를 더 게시 할 수 있습니다. P – SlyOtis

답변

0

선언 오류, 무슨 일이 있었는지 모르지만 무언가를 찾았습니다 here

그리고 CollisionHandler의 새 파일과 인스턴스를 만들었습니다. g가 다시 작동합니다. 고마워요