我在C++
玩了一段时间,最近刚开始进入SDL
和SDL2
。
我能够让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;代码在这里 - 我没有获得许可......
答案 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程序来测试您的环境。您可以使用任何更简单的文本编辑器(例如gedit
或cat > 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;
}
。
代码;
|
希望有所帮助。