2017-01-23 2 views
1

Я пытаюсь изучить простой способ создания управляемого окна в Linux, и исследования привели меня к использованию SDL. Я был на второй части http://lazyfoo.net/tutorials/SDL, где загружал изображение на экран. Я скопировал их код и создал пользовательские значения. Это мой код:C Ошибка между объявлением определения define и 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», то первая ошибка, я получаю:

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 right в первый раз. Я предполагаю, что он не знает о типе 'SDL_Window', хотя я не уверен, почему, поскольку я думаю, что он должен быть включен в заголовок SDL. – 0x5453

+0

Кажется, что у вас есть заголовок 'SDL/SDL.h', который является пустым или иным образом действительным, но не релевантным в каталоге, где ищет компилятор, и он не находит« официальную »версию. Поскольку вы используете '-Wall', вы должны добавить' -H' тоже, что скажет вам, какой файл включен для 'SDL/SDL.h'. И, хорошие шансы, что знание того, какой файл включен, покажет, что происходит не так. По сути, в первой версии тип 'SDL_Window' неизвестен, поэтому заголовок' SDL/SDL.h', по-видимому, не выполняет свою работу. –

ответ

2

Не используйте = в вашем #define. Ваша программа не распознает SDL_Window, потому что она еще не объявлена. Я подозреваю, что вы пытаетесь скомпилировать код SDL 2 с заголовком 1.2.

Смежные вопросы