2017-01-23 10 views
1

리눅스에서 제어 가능한 창을 만드는 간단한 방법을 배우려고하고 있으며, 연구를 통해 SDL을 사용하게되었습니다. 나는 화면의 이미지를로드하는 http://lazyfoo.net/tutorials/SDL의 두 번째 부분에있었습니다. 코드를 복사하고 사용자 정의 정의 값을 만들었습니다. 이건 내 코드입니다 :C 정의 포인터와 char 포인터 선언 사이의 오류

#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"매개 변수 내가 얻을 첫 번째 오류가 추가로 그것을 컴파일 :

#include <SDL/SDL.h> 
#define SDL_WINDOWPOS_UNDEFINED=0 
#define SCREEN_WIDTH=800 
#define SCREEN_HEIGHT=600 
#define SDL_WINDOW_SHOWN=1 

다시 컴파일을 시도, 내가 볼 :

program.c:7: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token  

은 그때 내가 바보 같은 짓을 생각하고 정의에 동일, 나의 처음 몇 줄은 이제이 있습니다 추가 진행

warning: missing whitespace after the macro name 

및 그에 대한 내용은 내가 입력 한 등호와 관련되어 있으며 위와 같은 오류가 표시됩니다.

SDL.h에 대해 불평하지 않았습니다.

내가 뭘 잘못하고 있니?

+0

첫 번째로'# define'을 올바르게했습니다. 내 추측에 의하면 SDL 헤더에 SDL_Window 타입이 포함되어 있어야한다고 생각하기 때문에 SDL_Window 타입에 대해 알지 못한다. – 0x5453

+0

비어 있거나 유효하지만 컴파일러가 찾고있는 디렉토리와 관련이없는'SDL/SDL.h' 헤더가있는 것처럼 들리며 '공식'버전을 찾지 못했습니다. '-Wall'을 사용하고 있기 때문에,'-H'를 추가해야합니다 - 그러면'SDL/SDL.h '에 어떤 파일이 포함되어 있는지 알려줄 것입니다. 그리고 어떤 파일이 포함되어 있는지 아는 것이 잘못 될 수 있음을 보여주는 좋은 기회입니다. 근본적으로, 첫 번째 버전에서'SDL_Window' 타입은 알려지지 않았기 때문에'SDL/SDL.h' 헤더는 아마 그 일을하지 않을 것입니다. –

답변

2

#define=을 사용하지 마십시오. 프로그램이 아직 선언되지 않았기 때문에 귀하의 프로그램은 SDL_Window을 인식하지 못합니다. SDL 2 코드를 1.2 헤더로 컴파일하려고합니다.