SFML C++ - 用于制作基本窗口的代码在划分时不起作用



我一直在测试SFML和structs,所以我决定用C++编写这一小段代码,结果失败了:

/tmp/ccudZjgy.o: In function `fontconfig()':
main.cpp:(.text+0x96): undefined reference to `Text::font'
/tmp/ccudZjgy.o: In function `textconfig()':
main.cpp:(.text+0x146): undefined reference to `Text::font'
main.cpp:(.text+0x1fa): undefined reference to `Text::text'
/tmp/ccudZjgy.o: In function `window()':
main.cpp:(.text+0x3d8): undefined reference to `Text::text'
collect2: error: ld returned 1 exit status

这是我的代码:

#include <SFML/Graphics.hpp>
struct Text{
     static sf::Font font;
     static sf::Text text;  
};
void fontconfig()
{
     sf::Font font;
     font.loadFromFile("flower.ttf");
     Text Text1;
     Text1.font = font;
}
void textconfig()
{
     Text Text1;
     sf::Text text;
     text.setFont(Text1.font);
     text.setCharacterSize(100);
     text.setColor(sf::Color::Red);
     text.setString("Ugh...");
     text.setStyle(sf::Text::Bold);
     Text1.text = text;
}
 void window()
 {
        Text Text1;
        sf::RenderWindow window(sf::VideoMode(300, 150), "Hello");
        while (window.isOpen())
        {
              sf::Event event;
              while (window.pollEvent(event))
              {
                     if (event.type == sf::Event::Closed)
                     window.close();
              } 
              window.clear(sf::Color::White);
              window.draw(Text1.text);
              window.display();
              } 

}
int main()
{
 fontconfig();
 textconfig();
 window();
 return 0;
}

函数中的变量是局部变量。由于名称空间的工作方式,与全局变量同名的局部变量首先被引用,如果你想这样的话,在引用全局变量之前用双冒号:

Foo // refers to the default, local scope

::Foo // refers to the global scope

换句话说,你从来没有真正接触过全局变量。

相反,当您离开函数范围时,您所修改的局部变量会被丢弃。

相反,如果您希望使用子程序、赋值函数样式,则应该将外部资源类作为参数引用传递给函数,如下所示:

void textconfig(sf::Text& text); // pass by reference for a subroutine-focused, mutator style

最新更新