2017-01-23 3 views
1

J'essaie d'apprendre un moyen simple de créer une fenêtre contrôlable sous Linux, et la recherche m'a conduit à utiliser SDL. J'étais sur la deuxième partie de http://lazyfoo.net/tutorials/SDL où je charge une image sur l'écran. J'ai copié leur code et créé des valeurs de définition personnalisées. Ceci est mon code:C Erreur entre la déclaration du pointeur define et 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; 
} 

Lors de la compilation, même avec les drapeaux du compilateur « -Wall » et « -Wextra » activée et le paramètre « -lSDL » ajouté, la première erreur que je reçois est:

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

J'ai alors ajouter des égaux aux définit en pensant que je l'ai fait quelque chose de stupide, donc mes premières lignes sont maintenant ceci:

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

Lors d'une tentative de compiler à nouveau, je vois:

warning: missing whitespace after the macro name 

et en ce qui concerne chaque signe égal que je mets dedans. Et je vois aussi la même erreur que ci-dessus.

Il ne s'est pas plaint que SDL.h ne soit pas trouvé.

Qu'est-ce que je fais mal?

+0

La première fois, vous avez eu le droit '# define's. Je suppose qu'il ne connaît pas le type 'SDL_Window', bien que je ne sache pas pourquoi, car je pense qu'il devrait être inclus dans l'en-tête SDL. – 0x5453

+0

Il semble que vous ayez un en-tête 'SDL/SDL.h' vide ou valide, mais pas pertinent dans un répertoire où le compilateur cherche, et qu'il ne trouve pas la version 'officielle'. Puisque vous utilisez '-Wall', vous devriez aussi ajouter' -H' - qui vous indiquera quel fichier est inclus pour 'SDL/SDL.h'. Et, les chances sont bonnes que le fait de savoir quel fichier est inclus montrera ce qui ne va pas. Fondamentalement, dans la première version, le type 'SDL_Window' n'est pas connu - donc l'en-tête' SDL/SDL.h' ne fait vraisemblablement pas son travail. –

Répondre

2

N'utilisez pas = dans votre #define. Votre programme ne reconnaît pas SDL_Window car il n'a pas encore été déclaré. Je suppose que vous essayez de compiler un code SDL 2 avec un en-tête 1.2.