You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨平台游戏开发CMake项目窗口无法打开及编译错误求助

问题分析与解决方案

核心错误根源

编译报错的直接原因是**service_locator.h文件末尾缺少分号**,导致编译器解析后续代码时出现语法混乱,进而引发一系列连锁错误(如glfw_window.h中的类定义报错)。此外还有几处细节问题需要修正:


具体修复步骤

1. 修复service_locator.h的语法错误

C++类定义结束后必须添加分号,补充后代码如下:

#pragma once

#include <memory>
#include <template_engine/platform/window.h>

class ServiceLocator
{
public:
    static inline const std::unique_ptr<Window>& GetWindow() { return _window; }

    static inline void Provide(Window* window)
    {
        if(_window == nullptr)
        {
            _window = std::unique_ptr<Window>(window);
        }
    }

private:
    static inline std::unique_ptr<Window> _window = nullptr;
}; // 此处必须添加分号

2. 完善glfw_window.cpp的窗口初始化逻辑

当前代码创建窗口后未设置GLFW上下文,且缺少窗口创建失败的判断,修正后:

void CustomWindow::OpenWindow()
{
    glfwInit();

    _window = glfwCreateWindow(800, 600, "template engine window", nullptr, nullptr);
    if (_window) {
        glfwMakeContextCurrent(_window); // 设置窗口上下文
    }
}

bool CustomWindow::Update()
{
    if (!_window) return true; // 窗口创建失败直接退出循环
    glfwPollEvents();
    return glfwWindowShouldClose(_window);
}

3. 修正CMake配置路径问题

在external/engine/CMakeLists.txt中,调整头文件路径引用,确保GLFW和GLM的头文件能被正确找到:

target_include_directories(${PROJECT_NAME}
    PUBLIC
        $<INSTALL_INTERFACE:include>
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
        ${GLM_INCLUDE_DIRS}
    PRIVATE
        ${GLFW_INCLUDE_DIR}
    )

4. 统一编译器环境

你的tasks.json使用MinGW的g++,但c_cpp_properties.json配置的是MSVC,导致IntelliSense与实际编译环境不一致,建议二选一统一:

  • 若使用MSVC:修改tasks.json使用cl.exe编译;
  • 若使用MinGW:修改c_cpp_properties.json的compilerPath为C:/msys64/mingw64/bin/g++.exe,intelliSenseMode改为windows-gcc-x64。

验证修复

完成上述修改后,重新运行CMake生成项目并编译,此前的语法错误会全部消失,窗口可正常创建并运行。

内容的提问来源于stack exchange,提问作者RomektBoi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 02:23:12