1
我想学习一个简单的方法来在Linux中创建一个可控制的窗口,并且研究使我使用SDL。我在http://lazyfoo.net/tutorials/SDL的第二部分,我在屏幕上加载图像。我复制了他们的代码并创建了自定义的值。这是我的代码:C定义和字符指针声明之间的错误
#include <SDL/SDL.h>
#define SDL_WINDOWPOS_UNDEFINED 0
#define SCREEN_WIDTH 800
#define SCREEN_HEIGHT 600
#define SDL_WINDOW_SHOWN 1
SDL_Window* gWindow;
SDL_Surface* gScreenSurface;
SDL_Surface* gHelloWorld;
int init(){
int success = 1;
if(SDL_Init(SDL_INIT_VIDEO) < 0)
{
printf("SDL could not initialize! SDL_Error: %s\n", SDL_GetError());
success = 0;
}
else
{
gWindow = SDL_CreateWindow("SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
if(gWindow == NULL)
{
printf("Window could not be created! SDL_Error: %s\n", SDL_GetError());
success = 0;
}
else
{
gScreenSurface = SDL_GetWindowSurface(gWindow);
}
}
return success;
}
int loadMedia(){
int success = 1;
gHelloWorld = SDL_LoadBMP("/circuit.png");
if(gHelloWorld == NULL)
{
printf("Unable to load image! SDL Error: %s\n", SDL_GetError());
success = 0;
}
return success;
}
void close()
{
SDL_FreeSurface(gHelloWorld);
gHelloWorld = NULL;
SDL_DestroyWindow(gWindow);
gWindow = NULL;
SDL_Quit();
}
int main(int argc, char* args[]){
init();
loadMedia();
close();
return 0;
}
当编译它,甚至用“-Wall”和“-Wextra”编译器标志开启和“-lSDL”参数补充说,第一个错误我得到的是:
program.c:7: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
我接着就等于加入到定义想我做了一件愚蠢的,所以我的前几行现在这个是:
#include <SDL/SDL.h>
#define SDL_WINDOWPOS_UNDEFINED=0
#define SCREEN_WIDTH=800
#define SCREEN_HEIGHT=600
#define SDL_WINDOW_SHOWN=1
当试图重新编译,我看到:
warning: missing whitespace after the macro name
这就是关于我放入的每个等号。我也看到了与上面相同的错误。
它没有抱怨SDL.h没有被发现。
我在做什么错?
你第一次拥有'#define's的权利。我的猜测是,它不知道“SDL_Window”类型,尽管我不确定为什么,因为我认为它应该包含在SDL头文件中。 – 0x5453
听起来好像你有一个SDL/SDL.h头文件是空的或者是有效的,但是在编译器所在的目录中不相关,并且它没有找到'官方'版本。既然你使用'-Wall',你应该加上'-H',它会告诉你哪个文件包含在'SDL/SDL.h'中。而且,了解包含哪个文件将显示出现问题的机会很大。基本上,在第一个版本中,“SDL_Window”类型是未知的 - 所以“SDL/SDL.h”头文件可能没有完成它的工作。 –