c++ - 未定义对 sf::Window::hasFocus 的引用?

标签 c++ linker-errors sfml

问题

SFML 窗口实现方法 hasFocus() 作为检查窗口是否有焦点或是否为背景窗口的便捷方式。

令我感到奇怪的是,此方法似乎没有为 sf::RenderWindow 实现,尤其是当以下代码编译但不链接时。 (也许这是一个错误或开发人员的疏忽?如果是这样,在下一组错误修复中实现它可能是一个想法。)

代码示例:

sf::RenderWindow window;

while(window.isOpen())
{

    if(window.hasFocus())
    {
        // do something
    }

    window.clear();
    // etc drawing code
}

此编译使用:g++ --std=c++11 main.cpp -o ratwatch -lsfml-graphics -lsfml-window -lsfml-system

可惜链接不上,报错如下:

/tmp/ccWhfqtT.o: In function `main':
main.cpp:(.text+0xc3b): undefined reference to `sf::Window::hasFocus() const'
collect2: error: ld returned 1 exit status

我的链接库有误吗?我是否错过了另一个 -lsfml...

解决方法

我设法用下面的代码做了我想做的事情,但这显然是一个困惑且不必要的复杂解决方法:

sf::RenderWindow window(sf::VideoMode(800, 600), "text");
bool WINDOW_HAS_FOCUS = false;

while(window.isOpen())
{

    sf::Event event;
    while(window.pollEvent(event))
    {

        if(event.type == sf::Event::LostFocus)
        {
            WINDOW_HAS_FOCUS = false;
        }
        else if(event.type == sf::Event::GainedFocus)
        {
            WINDOW_HAS_FOCUS = true;
        }

    }

    // ... later in program ...

    if(WINDOW_HAS_FOCUS)
    {
        // do something
    }

    window.clear();
    // etc drawing code
}

如果无法找到我最初问题的解决方案,希望这对无法做我想做的事情的人有所帮助。

最佳答案

您请求的功能已在最新版本的 SFML 中可用。

void requestFocus(); 
// to give the window the focus

bool hasFocus() const; 
// to check whether the window is currently focused

此请求的问题已在 GitHub 上打开 here .

请求已通过此 request 合并到 master 中.

这是最后的 pull request .


您遇到的错误可能是由于您的 SFML header 和已编译的 SFML 二进制文件之间的版本不匹配造成的。我建议您确保您的 SFML 二进制文件已更新或重新编译 SFML。

关于c++ - 未定义对 sf::Window::hasFocus 的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32051064/

相关文章:

c++ - Boost.Python dll 在编译时被跳过

c++ - 快速转换 std::chrono::time_point 到/从 std::string

c++ - 输入数据类型检查循环未按预期工作 (C++)

c++ - BASS_ChannelGetLevel 返回 0

c++ - 与 "math.h"的链接错误 - 告诉链接器与其链接的选项是什么?

c++ - Boost iostreams 库存在,但我无法链接它

c++ - 警告: 'enum sf::Keyboard::Key'和 'enum sf::Mouse::Button'之间的比较[-Wenum-compare] |

compiler-errors - CodeBlocks - Irrlight 编译/运行错误

c++ - SFML C++ 绘制形状 vector

c++ - SFML 库 : strange error