IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Passage d'un tableau de structure à une fonction : erreur =(


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Passage d'un tableau de structure à une fonction : erreur =(
    Salut !

    J'ai un projet de puissance 4 à rendre pour la rentrée.
    Bref, quasiment tout est fait, sauf la partie sauvegarde (consigne à faire). Ou je dois pouvoir sauvegarder une partie, qu'elle soit entre deux joueurs ou entre un joueur et l'IA.

    J'ai donc créé une fonction à laquelle je veux passer ma structure mais ça ne marche pas.

    Au début du jeu, j'ai créé cette structure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct {
            char nom[LGNAME];
            int score;
            } jouer; /* Structure joueur contenant le nom du joueur, son score */
    (Je l'ai mis en dehors du main au dessus des prototypes)

    Plus tard, je fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    jouer joueur[2];
        joueur[0].score = 0;
        joueur[1].score = 0;
    Je crée donc un tableau de deux joueurs.
    Lorsque le gars choisi le mode deux joueurs, le programme invite les deux joueurs à entrer leurs noms; sinon, (contre l'ordi), le joueur[0] se voit demander son nom, et l'autre est initialisé à 'P''C''\0'..
    Bref, tout va bien jusqu'ici.

    Mais depuis que j'essaie de créer ma fonction pour sauvegarder le jeu (je commence à la faire), j'ai des soucis.

    Voici mon prototype de fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void Backup (char mode, char ia, struct jouer *joueur, int who_is, int c[]);
    La fonction prend en paramètre le mode choisi (contre le pc ou à deux) qui est un char, le niveau de l'intelligence artificielle qui est un char (à 0 si le mode n'a rien à voir avec l'ia), who_is qui représente le joueur qui doit jouer à ce moment-là, et c[] : un tableau de 8 indices. j'ai un puisance 4 de 8x8. Pour chaque colonne, le c[] prend la valeur de la première case libre (jouable par l'utilisateur ou l'ia).
    Voilà, le problème se situe hélas avec la structure.

    Voici l'appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (c_choisie == 's' || c_choisie == 'S') {Backup (mode, ia, &joueur, a_qui_le_tour, c);}
    (J'avais mis sans & devant joueur au départ, mais ça ne change rien ..)

    Et voilà, des erreurs : inconflicting types, etc..

    Merci beaucoup pour votre aide..


  2. #2
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Si joueur, lors de ton appel, est le tableau de (2) structures tu dois passer l'adresse de la première structure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .... {Backup (mode, ia, joueur, a_qui_le_tour, c);}
    et non pas l'adresse du tableau (&joueur)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Salut,

    Merci pour ta réponse.

    En fait, j'avais essayé comme ça avant (ça me paraissait plus logique), mais ça ne marche hélas pas non plus =(

    edit : voici les erreurs que j'obtiens (avec joueur à l'appel):

    C:\Users\Antoine\Desktop\Dév\Puissance 4\main.c:918: error: conflicting types for 'Backup'
    C:\Users\Antoine\Desktop\Dév\Puissance 4\main.c:49: error: previous declaration of 'Backup' was here
    C:\Users\Antoine\Desktop\Dév\Puissance 4\main.c:918: error: conflicting types for 'Backup'
    C:\Users\Antoine\Desktop\Dév\Puissance 4\main.c:49: error: previous declaration of 'Backup' was here

  4. #4
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Il dit que tu as une autre déclaration de type pour Backup à la ligne 49. Regarde ce que c'est. Moi, je ne connais pas les lignes 49 et 918.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Re,

    En fait, la ligne 49 est le prototype et la ligne 918 l'entête de la fonction :

    49 : void Backup (char mode, char ia, struct jouer *joueur, int who_is, int c[]);
    917 : void Backup (char mode, char ia, struct jouer *joueur, int who_is, int c[])
    918 : accolade ouvrante de la fonction.

    Voici le code en entier au cas où (je voulais mettre un H, mais ça ne marchait pas) :

    http://www.sendspace.com/file/9wnujn

    Merci

  6. #6
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Dans le prototype de la fonction Backup() et lors de sa définition, tu dois avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void Backup (char mode, char ia,  jouer *joueur, int who_is, int c[]);
    jouer est défini mais struct jouer ne l'est pas !

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup, ça marche !
    Je pensais que struct jouer et jouer étaient équivalents.
    Thanks.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/06/2015, 14h48
  2. Passage d'un tableau php dans une fonction javascript
    Par mcdelay dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 25/09/2013, 17h25
  3. Réponses: 0
    Dernier message: 15/06/2010, 10h58
  4. Passage de tableau de structure à une fonction
    Par Kefass dans le forum Débuter
    Réponses: 2
    Dernier message: 18/08/2009, 19h07
  5. Comment passer un tableau de structure à une fonction
    Par mackla dans le forum Débuter
    Réponses: 12
    Dernier message: 01/06/2008, 17h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo