首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sdl,sdl2错误: SDL_window (及其他)未声明

sdl,sdl2错误: SDL_window (及其他)未声明
EN

Stack Overflow用户
提问于 2016-02-05 06:12:21
回答 1查看 7.3K关注 0票数 2

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

我能让点演示程序开始工作。

但是其他程序,如复制和粘贴的懒汉的制作似乎不起作用。我已经安装了SDL和SDL2 (以及卸载和重新安装)。我在Ubuntu15.04上,我有IDE CodeBlocks链接(-ISDL2),错误是SDL_Window - SDL_WINDOWPOS_UNDEFINED - SDL_WINDOW_SHOWN - SDL_CreateWindow - SDL_GetWindowSurface - SDL_UpdateWindowSurface,最后,SDL_DestroyWindow -没有在这个范围内声明。

此外,我还包括:

代码语言:javascript
复制
#include </usr/include/SDL/SDL.h>
#include </usr/include/SDL2/SDL.h>
#include <stdio.h>

我很确定我不需要所有的位置,但没有它,它也是行不通的。另一个注意事项是,当我键入#includes时,CodeBlocks会建议使用SDL2/SDL.h,而不是SDL/SDL.h

我遗漏了什么?

我不认为我能把懒散的密码放在这里-我没有得到许可.

EN

回答 1

Stack Overflow用户

发布于 2016-02-05 06:48:02

你列出的代码;

代码语言:javascript
复制
#include </usr/include/SDL/SDL.h>
#include </usr/include/SDL2/SDL.h>
#include <stdio.h>

你为什么不把它改成

代码语言:javascript
复制
#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以表明您正在将代码与SDL2库链接。

编辑

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

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

(B)编码;

代码语言:javascript
复制
#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;
}

希望这能有所帮助。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35217417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档