2017-01-23 58 views
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沒有被發現。

我在做什麼錯?

+0

你第一次擁有'#define's的權利。我的猜測是,它不知道「SDL_Window」類型,儘管我不確定爲什麼,因爲我認爲它應該包含在SDL頭文件中。 – 0x5453

+0

聽起來好像你有一個SDL/SDL.h頭文件是空的或者是有效的,但是在編譯器所在的目錄中不相關,並且它沒有找到'官方'版本。既然你使用'-Wall',你應該加上'-H',它會告訴你哪個文件包含在'SDL/SDL.h'中。而且,瞭解包含哪個文件將顯示出現問題的機會很大。基本上,在第一個版本中,「SDL_Window」類型是未知的 - 所以「SDL/SDL.h」頭文件可能沒有完成它的工作。 –

回答

2

請勿在#define中使用=。您的程序未識別SDL_Window,因爲它尚未聲明。我懷疑你正在試圖編譯一個帶有1.2頭的SDL 2代碼。