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

Dan*_* R. 2 c++ linux sdl codeblocks sdl-2

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

我能够让点演示程序工作.

但其他程序,如Lazy Foo'Productions的复制和粘贴似乎不起作用.我安装了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>
Run Code Online (Sandbox Code Playgroud)

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

我错过了什么?

我不认为我可以在这里放入Lazy Foo代码 - 我没有得到许可......

sha*_*are 5

你列出的代码;

#include </usr/include/SDL/SDL.h>
#include </usr/include/SDL2/SDL.h>
#include <stdio.h>
Run Code Online (Sandbox Code Playgroud)

你为什么不把它换成

#include <SDL2/SDL.h>
#include <stdio.h>
Run Code Online (Sandbox Code Playgroud)

因为第一个标题是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指示您将代码与SDL2库链接的问题.

编辑

一个简单的SDL程序来测试您的环境.你可以使用任何简单的文本编辑器如nanogedit或他人进行编辑,并运行上面的编译命令来测试您的设置.

最简单的方法是复制代码,然后从终端发出cat > sdltest.cpp并粘贴代码,然后按[ENTER]和[CTRL-C]结束它.然后你可以发出前面提到的编译命令g++ sdltest.cpp -lSDL2 -o sdltest.

码;

#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;
}
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.