尝试初始化静态 RenderWindor 时出现“尝试引用已删除的函数”错误

问题描述 投票:0回答:1

错误:

...在第 15 行,我尝试初始化窗口:

#include <iostream>

#include <SFML/Graphics.hpp>

static class Renderer {

public:
    static sf::RenderWindow window;
    
      
};
sf::RenderWindow Renderer::window = sf::RenderWindow(sf::VideoMode(1200, 1000), "Proj");
class Quad {
public:
    sf::Vector2<float> Scale;
    sf::Vector2<float> Pos;
public:
    Quad(sf::Vector2<float> P, sf::Vector2<float> S) {
        Pos = P;
        Scale = S;
    }
    sf::RectangleShape RenderMe() {
        sf::RectangleShape s;
        s.setScale(Scale);
        s.setPosition(Pos);
        return s;
    }
};

int main()
{
    std::cout << "Hello World!\n";
    
        new Renderer;

       
       
           Quad s(sf::Vector2<float>(40,40), sf::Vector2<float>(20,20));
           


        while (Renderer::window.isOpen())
        {
            sf::Event event;
            while (Renderer::window.pollEvent(event))
            {
                if (event.type == sf::Event::Closed)
                    Renderer::window.close();
            }

            Renderer::window.clear();
            Renderer::window.draw(s.RenderMe());
            Renderer::window.display();
        }

        return 0;
    
    return 0;
    
}

脚本中的其他所有内容都有效。

据我所知,我已经正确设置了我的文件系统,所有问题都与我的脚本有关(我认为)

我主要尝试移动 init,以及更改某些位,例如不包括所有内容,但这些都会导致不同的错误,这似乎是最正确的。

c++ sfml
1个回答
1
投票

删除与类

Renderer
Renderer::window
相关的所有内容。 在主函数顶部放置一个定义:

sf::RenderWindow window(sf::VideoMode(1200, 1000), "Proj");

并在您使用过

window
的地方使用
Renderer::window

如果你坚持拥有一个 Renderer 对象,它应该看起来像这样:

class Renderer {
  public:
    sf::RenderWindow window;
    Renderer() : window(sf::VideoMode(1200, 1000), "Proj")) {}
};

并且在主函数中使用一个简单的

Renderer r;
就足够了。

© www.soinside.com 2019 - 2024. All rights reserved.