sdl,sdl2错误:SDL_window(等等)未声明

时间:2016-02-05 06:12:21

标签: c++ linux sdl codeblocks sdl-2

我在C++玩了一段时间,最近刚开始进入SDLSDL2

我能够让dot demo program工作。

但其他程序,例如Lazy Foo' Productions's复制和粘贴似乎不起作用。 我安装了SDL和SDL2(并且已卸载并重新安装。)我在Ubuntu 15.04上,并且我已连接IDE CodeBlocks(-ISDL2) 错误为SDL_Window - SDL_WINDOWPOS_UNDEFINED - SDL_WINDOW_SHOWN - SDL_CreateWindow - SDL_GetWindowSurface - SDL_UpdateWindowSurface,最后,SDL_DestroyWindow - 不是在此范围内声明。

另外,我还包括:

#include </usr/include/SDL/SDL.h>
#include </usr/include/SDL2/SDL.h>
#include <stdio.h>

我很确定我不需要所有这些位置,但如果没有它,它也无法工作。另外请注意,当我输入#includes时,CodeBlocks会建议SDL2/SDL.h但不会SDL/SDL.h

我错过了什么?

我不认为我可以把Lazy Foo&#39;代码在这里 - 我没有获得许可......

1 个答案:

答案 0 :(得分:5)

您列出的代码;

#include </usr/include/SDL/SDL.h>
#include </usr/include/SDL2/SDL.h>
#include <stdio.h>

为什么不将其更改为

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

因为第一个标题是SDL_CreateWindow和其他SDL2函数被声明的地方吗?

此外,您不需要同时包含SDL和SDL2标头。事实上,这很可能是您问题的根源,因为您只需要包含您正在使用的版本。

如果您正在关注lazyfoo网站上的教程,您可以检查您所关注的教程是否正在使用其目录中的SDL1.2或SDL2,因为该网站实际上有两个版本的教程。

<强>更新

我没注意到您的平台是Linux平台。然后解决问题就容易多了。您之前使用的演示是使用SDL-1.2完成的,而gcc错误暗示您正在使用SDL-2.0,因此SDL_CreateWindow和其他未定义的错误。您应该安装SDL-2.0库和SDL-2.0开发文件(它将为您提供必要的SDL-2.0标头)。您可以将此参考您的平台发行版提供的SDL-2.0软件包。

至于编辑,它将与您所遵循的教程相同,只需更改gcc sdltest.o -lSDL -o sdltest,而不是gcc sdltest.o -lSDL2 -o sdltest,您将发出nano来表示您正在关联您的代码针对SDL2库。

修改

一个简单的SDL程序来测试您的环境。您可以使用任何更简单的文本编辑器(例如geditcat > sdltest.cpp或其他编辑器来编辑它,并运行上面的编译命令来测试您的设置。

最简单的方法是复制代码,然后从终端发出g++ sdltest.cpp -lSDL2 -o sdltest并粘贴代码,然后按[ENTER]和[CTRL-C]结束它。然后,您可以发出前面提到的编译命令#include <SDL2/SDL.h> #include <stdio.h> int main() { SDL_Window *p; SDL_Renderer *w; p = SDL_CreateWindow("Game",SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,800,640,SDL_WINDOW_SHOWN); w = SDL_CreateRenderer(p, -1, 0); SDL_RenderClear(w); SDL_SetRenderDrawColor(w,255,0,0,255); SDL_Rect Rect = {220,140,200,200}; SDL_RenderFillRect(w,&Rect); SDL_RenderPresent(w); SDL_Delay(3000); SDL_DestroyRenderer(w); SDL_DestroyWindow(p); SDL_Quit(); return 0; }

代码;

|

希望有所帮助。