我对C ++很陌生,所以请放轻松。
我试图使用sfml来创建RenderWindow。然后,在创建播放器时,该播放器的关联窗口" object被设置为之前创建的RenderWindow。我的目的是能够从播放器对象运行窗口方法,例如window.draw(),即:
player::drawSprite() {
window.draw(sprite);
}
但是,我遇到了错误:
error: use of deleted function ‘sf::RenderWindow& sf::RenderWindow::operator=(const sf::RenderWindow&)’
window = win;
^
在错误日志中,我还看到了:
error: initializing argument 1 of ‘Player::Player(sf::RenderWindow)’
Player(sf::RenderWindow win)
^
我的代码(与遗漏问题无关的任何内容)如下:
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include <cstring>
#include <cstdlib>
#include <iostream>
class Player
{
private:
float x;
float y;
float speed;
sf::RenderWindow window;
public:
Player(sf::RenderWindow win)
{
x = 640;
y = 360;
speed = 5;
window = win;
}
};
int main()
{
//Window Initialization
sf::RenderWindow window(sf::VideoMode(800, 600), "My window");
//Player Creation
Player player(window);
}
我认为问题可能与const,引用等有关,但我不熟悉C ++以便轻松识别它。我该如何解决这个问题?
答案 0 :(得分:2)
你应该使用引用或指向窗口对象的指针,因为我认为你不希望每个玩家拥有自己的窗口。
因此,您的播放器应如下所示:
class Player
{
private:
float x;
float y;
float speed;
sf::RenderWindow& window; // reference
public:
Player(sf::RenderWindow& win) // accepts reference
: window(win) // stores reference
{
x = 640;
y = 360;
speed = 5;
// window = win;
}
};