使用SDL_CreateWindow时遇“expected expression before const”错误求助
SDL2窗口创建错误修复:expected expression before const及参数数量问题
错误原因分析
你的代码存在几个关键语法和逻辑错误,导致了这两个编译报错:
- 函数调用写成了函数声明格式:你在
main里写的SDL_Window * SDL_CreateWindow(...)是函数声明的写法,不是调用函数的正确方式——调用函数时不需要在参数前加类型(比如const char *、int)。 - 字符串参数语法非法:
const char *"title"是错误写法,直接传入字符串字面量"title"即可,它本身就是const char*类型。 - 错误定义变量类型:
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
相关产品推荐
相关产品推荐

