Error: expected ')' before '*' token en C

Résolu
Eronn Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -  
Eronn Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Voila mon problème :
J'obtiens l'erreur expected ')' before '*' token à la ligne 1 de mon fichier menu.c : "void menu(SDL_Surface* screen)". Pour ceux qui auraient le courage de jeter un oeil à mon 1er programme, voila mes fichiers sources et headers, tout conseil est le bienvenu :

main.c:

#include <stdlib.h>
#include <stdio.h>
#include <SDL.h>
#include <SDL_image.h>
#include <SDL_ttf.h>

#include "main.h"
#include "menu.h"
#include "jeu.h"

int main(int argc, char* argv[])
{
    SDL_Surface *screen = NULL;

    SDL_Init(SDL_INIT_VIDEO);

    TTF_Init();

    screen = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
    SDL_WM_SetCaption("Bob's Game", NULL);

    menu(screen);

    TTF_Quit();

    SDL_Quit();


    return EXIT_SUCCESS;
}

void initImage(SDL_Surface** image, const char chemin [], SDL_Rect* coord, int x, int y)
{
    *image = IMG_Load(chemin);
    coord->x = x;
    coord->y = y;
    coord->w = (**image).w;
    coord->h = (**image).h;
}

int AABB(SDL_Event event, SDL_Rect coord)
{
    if(event.motion.x >= coord.x && event.motion.x <= coord.x+coord.w &&
       event.motion.y >= coord.y && event.motion.y <= coord.y+coord.h)
        return 1;
    else
        return 0;
}


main.h :

#ifndef MAIN_H_DEF
#define MAIN_H_DEF

void initImage(SDL_Surface** image, const char chemin[], SDL_Rect* coord, int x, int y);
int AABB(SDL_Event event, SDL_Rect coord);

#endif


menu.c :

void menu(SDL_Surface* screen)
{
    SDL_Surface *bJouerOff = NULL, *bJouerOn;
    SDL_Surface *bQuitterOff = NULL, *bQuitterOn;
    SDL_Surface *fond = NULL;

    SDL_Rect coordBJouer, coordBQuitter, coordFond;

    initImage(&bJouerOff, "IMG/Jouer Off.png", &coordBJouer, 200, 300);
    initImage(&bJouerOn, "IMG/Jouer On.png", &coordBJouer, 200, 300);
    initImage(&bQuitterOff, "IMG/Quitter Off.png", &coordBQuitter, 250, 450);
    initImage(&bQuitterOn, "IMG/Quitter On.png", &coordBQuitter, 250, 450);
    initImage(&fond, "IMG/Fond.png", &coordFond, 0, 0);

    int done = 0;
    SDL_Event event;

    while(!done)
    {
        SDL_WaitEvent(&event);

        if(event.key.type == SDL_Quit)
            done = 1;

        SDL_BlitSurface(fond, NULL, screen, &coordFond);

        if(AABB(event, coordBJouer))
        {
            SDL_BlitSurface(bJouerOn, NULL, screen, &coordBJouer);
            if(event.button.type == SDL_MOUSEBUTTONDOWN &&
               event.button.button == SDL_BUTTON_LEFT)
                jeu(screen);
        }
        else
            SDL_BlitSurface(bJouerOff, NULL, screen, &coordBJouer);

        if(AABB(event, coordBQuitter))
        {
            SDL_BlitSurface(bQuitterOn, NULL, screen, &coordBQuitter);
            if(event.button.type == SDL_MOUSEBUTTONDOWN &&
               event.button.button == SDL_BUTTON_LEFT)
                done = 1;
        }
        else
            SDL_BlitSurface(bQuitterOff, NULL, screen, &coordBQuitter);

        SDL_Flip(screen);
    }


    SDL_FreeSurface(bJouerOff);
    SDL_FreeSurface(bJouerOn);
    SDL_FreeSurface(bQuitterOff);
    SDL_FreeSurface(bQuitterOn);
    SDL_FreeSurface(fond);
}


menu.h :

#ifndef MENU_H_DEF
#define MENU_H_DEF

void menu(SDL_Surface* screen);

#endif


jeu.c :

void jeu(SDL_Surface* screen)
{
    //Pas encore codée
}


jeu.h :

#ifndef JEU_H_DEF
#define JEU_H_DEF

void jeu(SDL_Surface* screen);

#endif

3 réponses

le père
 
Bonjour

Ton compilateur ne sait pas ce que c'est que SDL_Surface car ça ne fait pas partie des types prédéfinis en C. C'est ça qui cause ton erreur.
Il faut lui définir en incluant un fichier . h avant, qui contient la définition du type SDL_Surface.
Je ne connais pas les bibliothèques SDL, mais il doit bien y avoir une doc (ou un exemple de programme) qui dit où se trouve cette définition.
Peut-être #include <SDL.h> tout simplement
0
Eronn Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
SDL.h est déjà inclut et avant l'include de menu.c justement, dois-je l'inclure à nouveau et ou ? Merci de ton aide.
0
le père
 
SDL.h est déjà inclut et avant l'include de menu.c
Il est inclus où ? La ligne 1 de menu.c, c'est bien void menu(SDL_Surface* screen) non ? Car c'est dans ce fichier qu'il y a une erreur, c'est dans ce fichier qu'il faut ajouter un include.
Si tu parles du fait qu'il y a #include "menu.h" après #include <SDL.h> dans main.c, c'est que tu n'as pas compris ce qu'est un #include et pourquoi il en faut. Quand tu compiles menu.c, ton compilateur ignore ce qu'il y a dans main.c et n'a aucune raison d'en tenir compte.
0
Eronn Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
D'accord, désolé j'en suis qu'à mon 1er programme
J'ai rajouté les includes au début de menu.c :

#include <stdlib.h> 
#include <stdio.h> 
#include <SDL.h> 
#include <SDL_image.h> 
#include <SDL_ttf.h> 

#include "main.h" 
#include "menu.h" 
#include "jeu.h
"

Et ça marche, merci pour tout. Mais est-ce qu'elle sont toutes nécessaires ?
0
le père
 
Mais est-ce qu'elle sont toutes nécessaires ?
Non. Les include permettent d'inclure des déclarations (de type, de variable, de fonction...). Tu n'as besoin de mettre que ceux qui déclarent des éléments réellement utilisés dans le fichier à compiler.
0
Eronn Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour tout
0