繁体   English   中英

使用删除的函数'sf :: RenderWindow&sf :: RenderWindow :: operator =(const sf :: RenderWindow&)'

[英]use of deleted function ‘sf::RenderWindow& sf::RenderWindow::operator=(const sf::RenderWindow&)’

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM