gpt4 book ai didi

c++ - 使用已删除的函数 ‘sf::RenderWindow& sf::RenderWindow::operator=(const sf::RenderWindow&)’

转载 作者:行者123 更新时间:2023-11-28 02:23:38 24 4
gpt4 key购买 nike

我是 C++ 的新手,所以请放轻松。

我正在尝试使用 sfml 创建 RenderWindow。然后,在创建播放器时,该播放器关联的“窗口”对象被设置为先前创建的 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++ 不够熟悉,无法轻松识别它。我该如何解决这个问题?

最佳答案

您应该使用指向窗口对象的引用或指针,因为我认为您不会希望每个玩家都有自己的窗口。

因此您的播放器应该如下所示:

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

关于c++ - 使用已删除的函数 ‘sf::RenderWindow& sf::RenderWindow::operator=(const sf::RenderWindow&)’,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31444949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com