c++ - 如何在函数/方法中使用 sf::window

标签 c++ function methods sfml

我想创建一个类,它接受一个string,并在sfml 中的一个框中给出string。为了使绘图更容易,我做了一个函数,它接受一个 renderwindow 的指针并用文本绘制框(我还没有实现 Box) 但是当我运行它时,我得到一个错误,不允许读取这个

我已经尝试通过引用传递窗口,但是没有用,结果还是一样

//Textbox.h

class textbox
{
public:
    sf::Text txtinbox;

    void draw(sf::RenderWindow* on)
    {
        on->draw(this->txtinbox);
    }//Error

    textbox(std::string txinbox)
    {

        sf::Font font;
        font.loadFromFile(fontfile);
        sf::Text text(txinbox , font);
        text.setCharacterSize(30);
        text.setStyle(sf::Text::Bold);
        text.setFillColor(sf::Color::White);
        txtinbox = text;

    }


    ~textbox()
    {}
private:

};

最佳答案

你有未定义的行为。

继续这个site并找到这句话:

It is important to note that the sf::Text instance doesn't copy the font that it uses, it only keeps a reference to it.

还有这个

never write a function that uses a local sf::Font instance for creating a text

现在看看你的构造函数:

{
    sf::Font font;                           // LOCAL VARIABLE
    font.loadFromFile(fontfile);
    sf::Text text(txinbox , font);           // GET REFERENCE TO LOCAL
    text.setCharacterSize(30);
    text.setStyle(sf::Text::Bold);
    text.setFillColor(sf::Color::White);
    txtinbox = text;
                                             // LOCAL IS DELETED
                                             // txtinbox HAS DANGLING REFERENCE
}

所以你必须延长font的生​​命周期,例如让它成为你类的数据成员。

class textbox
{
public:
    sf::Text txtinbox;
    sf::Font font;

     textbox(std::string txinbox)
     {
         font.loadFromFile(fontfile);

关于c++ - 如何在函数/方法中使用 sf::window,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57227203/

相关文章:

C++虚函数行为

r - 如何在R函数中将参数作为列表传递

函数中的 Javascript 调用函数不起作用

c++ - 这个模板语法可以改进吗?

c++ - "sys/mman.h: No such file or directory"

c++ - 无法在 Kubuntu 10 上运行 c++ cgi。检查了所有 apache 配置+exec+cgi-bin+api

c++ - C++ |等 ionic 物理的单元内粒子模拟-标准网格上的泊松方程求解器

c - 在 C 中的 vector 函数序列中避免(初学者)分配错误

c# - 如何从 WMI 获取方法

ruby - == 是 Ruby 中的一个特殊方法吗?