2017-01-23 1 views
1

Ich versuche, eine einfache Möglichkeit zu lernen, ein steuerbares Fenster in Linux zu erstellen, und die Forschung hat mich dazu geführt, SDL zu verwenden. Ich war auf dem zweiten Teil von http://lazyfoo.net/tutorials/SDL, wo ich ein Bild auf dem Bildschirm laden. Ich habe ihren Code kopiert und benutzerdefinierte Definitionswerte erstellt. Dies ist mein Code:C Fehler zwischen definieren und Char-Zeiger-Deklaration

#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; 
} 

Wenn es kompiliert, auch mit dem „-Wall“ und „-Wextra“ Compiler-Flags eingeschaltet und die „-lSDL“ Parameter hinzugefügt, der erste Fehler, den ich bekommen ist:

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

ich ging dann auf die definiert ist gleich hinzuzufügen, zu denken habe ich etwas dumm, so meine ersten Zeilen sind dies jetzt:

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

Wenn wieder zu kompilieren versuchen, ich sehe:

warning: missing whitespace after the macro name 

und das bezieht sich auf jedes Gleichheitszeichen, das ich einfüge. Und ich sehe auch den gleichen Fehler wie oben.

Es hat sich nicht darüber beschwert, dass SDL.h nicht gefunden wurde.

Was mache ich falsch?

+0

Sie hatten das '# define's Recht beim ersten Mal. Meine Vermutung ist, dass es nicht über den Typ "SDL_Window" weiß, obwohl ich nicht sicher bin, warum, weil ich denke, dass es in den SDL-Header enthalten sein sollte. – 0x5453

+0

Es klingt, als ob Sie eine 'SDL/SDL.h'-Kopfzeile haben, die leer oder sonst gültig, aber nicht relevant in einem Verzeichnis, in dem der Compiler sucht, und es findet nicht die 'offizielle' Version. Da Sie "-Wall" verwenden, sollten Sie auch "-H" hinzufügen - das wird Ihnen sagen, welche Datei für 'SDL/SDL.h' enthalten ist. Und die Chancen stehen gut, dass das Wissen, welche Datei enthalten ist, zeigt, was falsch läuft. Grundsätzlich ist in der ersten Version der 'SDL_Window' -Typ nicht bekannt - der SDL/SDL.h'-Header erfüllt also vermutlich nicht seine Aufgabe. –

Antwort

2

Verwenden Sie nicht = in Ihrem #define. Ihr Programm erkennt SDL_Window nicht, weil es noch nicht deklariert wurde. Ich vermute, dass Sie versuchen, einen SDL 2-Code mit einem 1.2-Header zu kompilieren.

Verwandte Themen