我想创建一个类,它接受一个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/