2016-02-05 125 views
1

我已经玩了C++一段时间,刚刚开始进入SDLSDL2sdl,sdl2错误:SDL_window(其他)未声明

我能够让dot demo program工作。

但是复制粘贴的其他程序(如Lazy Foo' Productions's)似乎不起作用。 我都SDL和安装SDL2我在Ubuntu 15.04和我有联系的IDE代码块(-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

我错过了什么?

我不认为我可以把懒惰富”代码在这里 - 我没有获得许可......

+0

您是否在'/ usr/include/SDL'和'/ usr/include/SDL2'中找到这些文件? – vmonteco

+0

我现在在/ usr/include /中有SDL和SDL2的文件夹。 –

回答

3

您列出的代码;

#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,因为该网站实际上有两个版本的教程。

UPDATE:

我没有注意到你的平台是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; 
} 

希望有所帮助。

+0

他需要让编译器在'/ usr/include'中查找include文件。此外,另一件事是你不应该把两个不同版本的相同的API包括在内。使用SDL2并省略“SDL”包含。 – Poriferous

+0

也许如果OP可以告诉我们他的平台,那会让我们更容易帮助他。 – share

+0

'/ usr/include'意味着他在一个类似Unix的平台上,特别是Linux上。另外,他的一个标签里面有'linux'。 :-) – Poriferous