You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

VS2022中使用SFML编写C++窗口代码出现错误,请求协助排查原因

VS2022中使用SFML编写C++窗口代码出现错误,请求协助排查原因

各位好,我在VS2022里尝试用SFML写一个简单的窗口程序,但运行后遇到了错误,完全摸不着头脑,想请大家帮忙排查下问题!

我写的代码如下:

//important libraries
#include <iostream>
#include <SFML/Graphics.hpp>
using namespace sf;

//start of game
int main() {
    VideoMode vm(1920, 1080);
    RenderWindow window(vm, "Timber!!!", Style::Fullscreen);
    return 0;
}

我原本预期会弹出一个标题为“Timber!!!”的全屏窗口,但实际运行后出现了错误。我已经仔细检查过引用的SFML头文件,里面的内容都是我需要的,实在搞不懂为什么编译器没办法正确识别并编译通过。


以下是一些可能的排查方向,供你参考:

  • 链接器库未配置:VS2022中仅包含头文件是不够的,还需要在项目属性的「链接器 -> 输入 -> 附加依赖项」里添加对应的SFML库文件。注意区分Debug和Release版本:Debug模式下要加带-d后缀的库(比如sfml-graphics-d.libsfml-window-d.libsfml-system-d.lib),Release模式则用不带后缀的版本(sfml-graphics.libsfml-window.libsfml-system.lib)。
  • 版本兼容性问题:确保你下载的SFML是适配VS2022的版本(对应VC17工具集),同时项目的平台(32位/64位)要和SFML的版本完全匹配,32位项目别用64位SFML,反之亦然。
  • 运行时库不匹配:项目属性中「C/C++ -> 代码生成 -> 运行时库」的设置,要和SFML编译时使用的运行时库一致。比如SFML如果是用MD(多线程DLL)编译的,你的项目也得设成MD,不能用MT
  • 缺少运行时DLL:如果是直接运行生成的可执行文件,需要把SFML对应的DLL文件放到exe同目录下。Debug模式用带-d的DLL,Release模式用普通DLL,比如sfml-system-2.dllsfml-window-2.dllsfml-graphics-2.dll这些。
  • 代码逻辑小问题:你的代码创建窗口后直接return 0了,就算编译通过,窗口也会一闪而过。正确的写法应该加上主循环来维持窗口运行,比如:
    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }
        window.clear();
        // 这里可以添加绘制内容的代码
        window.display();
    }
    

内容来源于stack exchange

火山引擎 最新活动