参数类型与指针/引用不匹配

时间:2016-10-12 18:12:17

标签: c++ c++11

我正在尝试将一个播放器添加到我正在创建的游戏中,但在此过程中,当我在mainGame.cpp中创建一个新播放器时,我一直在窗口参数上出现错误

问题是指针/引用问题,但我无法弄清楚如何修复它。

这是错误消息:

  

参数类型不匹配:不兼容的类型'sf :: RenderWindow&'和'sf :: RenderWindow *'

我的mainGame.cpp看起来像这样:

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;
};

1 个答案:

答案 0 :(得分:4)

您正在传递一个指向预期引用的指针。取消引用它:

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

顺便说一句,考虑使用智能指针,如unique_ptr来管理你的记忆。通过这种方式,您可以使用rule of zero/three/five而不是违反三/五部分规则。