[英]How can I use a sf::window in a function/method
我想创建一个接受string
的类,并在sfml
的框中给出string
。 为了使绘图更容易,我创建了一个函数,它接受一个renderwindow
的指针并用文本绘制框(我还没有实现框)但是当我运行它时我得到一个错误,它是不允许的读这个
我已经尝试通过引用传递窗口,但是没有用,结果是一样的
//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:
};
你有未定义的行为。
上这个网站,找到这句话:
重要的是要注意 sf::Text 实例不会复制它使用的字体,它只保留对它的引用。
和这个
永远不要编写使用本地sf::Font 实例来创建文本的函数
现在看看你的构造函数:
{
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.