2016-10-12 25 views
0

私は作成しているゲームにプレーヤーを追加しようとしていますが、このプロセスではmainGameで新しいプレーヤーを作成するときにウィンドウパラメータにエラーが発生します。 cppパラメータタイプがポインタ/参照と一致しません

問題はポインタ/リファレンスの問題ですが、修正方法を把握することができません。

これはエラーメッセージです:私のmainGame.cppは次のようになり互換性のないタイプの 'SF :: RenderWindowの&' と 'SF :: RenderWindowの*'

パラメーター型の不一致:

void mainGame::Initialize(sf::RenderWindow* window){ 
    this->player = new Player(20,100, config, window); 
} 

void mainGame::Destroy(sf::RenderWindow* window){ 
    delete this->player; 
} 

私mainGame.hファイル:

class mainGame : public tiny_state{ 
public: 
    void Initialize(sf::RenderWindow* window); 
    void Destroy(sf::RenderWindow* window); 

protected: 
    Player& player; 
    Config config; 
    sf::RenderWindow window; 
}; 

私Plyer.cppファイル:

Player::Player(float x, float y, const Config& config, sf::RenderWindow&) 
    : x(x), y(y), 
    config(config), 
    window(window) 
{ 
    rectangle.setSize(sf::Vector2f(sizeWidth, sizeHeight)); 
    rectangle.setFillColor(sf::Color::White); 
} 

void Player::move(float delta){ 
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) 
     y -= speed * delta; 
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) 
     y += speed * delta; 

    y = std::max(y, 0.f); 
    y = std::min(y, (float)(config.screenheight - sizeHeight)); 
} 

void Player::draw(){ 
    rectangle.setPosition(x, y); 
    window.draw(rectangle); 
} 

私player.hファイル:

struct Player{ 
    Player(float x, float y, const Config& config, sf::RenderWindow& window); 

    void move(float delta); 
    void draw(); 

    const int sizeHeight = 100; 
    const int sizeWidth = 10; 
    const float speed = 5; 
    float x, y; 

    sf::RectangleShape rectangle; 
    const Config& config; 
    sf::RenderWindow& window; 
}; 

答えて

4

あなたは参照が期待されているポインタを渡しています。それを間接参照:

this->player = new Player(20,100, config, *window); 
             ^

ところで、あなたの記憶を管理するためにunique_ptrのように、スマートポインタを使用することを検討してください。この方法では、3/5のルールを破る代わりにrule of zero/three/fiveを使用することができます。

関連する問題