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

使用SDL_CreateWindow时遇“expected expression before const”错误求助

SDL2窗口创建错误修复:expected expression before const及参数数量问题

错误原因分析

你的代码存在几个关键语法和逻辑错误,导致了这两个编译报错:

  1. 函数调用写成了函数声明格式:你在main里写的SDL_Window * SDL_CreateWindow(...)是函数声明的写法,不是调用函数的正确方式——调用函数时不需要在参数前加类型(比如const char *、int)。
  2. 字符串参数语法非法:const char *"title"是错误写法,直接传入字符串字面量"title"即可,它本身就是const char*类型。
  3. 错误定义变量类型:int SDL_Window;完全错误,SDL_Window是SDL提供的窗口结构体类型,你需要声明一个指针变量来接收SDL_CreateWindow的返回值。

修正后的完整代码

#include <stdio.h>
#define SDL_MAIN_HANDLED
#include <SDL2/SDL.h>

int main() {
    // 初始化SDL视频子系统(创建窗口前必须执行)
    if (SDL_Init(SDL_INIT_VIDEO) != 0) {
        printf("SDL初始化失败: %s\n", SDL_GetError());
        return 1;
    }

    // 正确调用SDL_CreateWindow创建窗口
    SDL_Window* window = SDL_CreateWindow(
        "title",
        SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
        720, 480,
        0
    );

    // 检查窗口是否创建成功
    if (!window) {
        printf("窗口创建失败: %s\n", SDL_GetError());
        SDL_Quit();
        return 1;
    }

    // 简单的窗口运行循环:等待用户关闭窗口
    SDL_Event event;
    int running = 1;
    while (running) {
        while (SDL_PollEvent(&event)) {
            if (event.type == SDL_QUIT) {
                running = 0;
            }
        }
    }

    // 清理资源
    SDL_DestroyWindow(window);
    SDL_Quit();
    return 0;
}

关键修复点说明

  • 移除了错误的int SDL_Window;声明,改用SDL_Window* window存储窗口指针。
  • 调用SDL_CreateWindow时,直接传入参数值,不再添加参数类型前缀,解决了expected expression before const和参数数量错误。
  • 添加了SDL初始化、错误检查和资源清理逻辑——SDL要求创建窗口前必须初始化对应子系统,程序结束后要释放资源避免内存泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 05:15:06