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

时间:2016-08-06 22:21:41

标签: c++ function struct sfml

我正在使用SFML和结构进行测试,所以我决定用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;
}

1 个答案:

答案 0 :(得分:1)

函数内的变量是局部变量。由于命名空间的工作方式,首先引用与全局变量同名的局部变量,如果你愿意,可以使用前面的双冒号来引用全局变量:

Foo // refers to the default, local scope

::Foo // refers to the global scope

换句话说,你从未真正触及全局变量。

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

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

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