对sf::Window::hasFocus的未定义引用

Undefined reference to sf::Window::hasFocus?

本文关键字:未定义 引用 Window sf hasFocus      更新时间:2023-10-16

问题

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上打开。

该请求已与此请求合并到master中。

这是最后一次提取请求。


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