我正在尝试将一个播放器添加到我正在创建的游戏中,但在此过程中,当我在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;
};
答案 0 :(得分:4)
您正在传递一个指向预期引用的指针。取消引用它:
this->player = new Player(20,100, config, *window);
^
顺便说一句,考虑使用智能指针,如unique_ptr
来管理你的记忆。通过这种方式,您可以使用rule of zero/three/five而不是违反三/五部分规则。