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?
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
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. –