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 :

probleme avec une structure.


Sujet :

C

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2006
    Messages : 107
    Par défaut probleme avec une structure.
    Bonjour tout le monde.
    Je commence le C et j'ai le problème suivant que je ne comprend pa :

    J'ai une structure uneCase dans mon fichier uneCase.c, ainsi qu'une méthode qui permet de construire une structure et qui me renvoit un pointeur dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef struct   {
    	double largeurCase;
    	double hauteurCase;
    	int occupee; //1 = il y a deja un cochon ou le gpl sur la case. 0 sinon.
    	int condamnee;//1 = la case est un trou beant. 0 sinon;
    	int indiceX, //permet de savoir ou se situe la case dans la grille.
    		indiceY;
    	double x, y; //abscisse et ordonnee de la case pour la representation graphique
    }uneCase;
     
     
    uneCase *initUneCase(double l,double h,int o,int c,int x,int y, double posx, double posy){
    	uneCase *ca= malloc(sizeof(uneCase));
    	ca->largeurCase=l;
    	ca->hauteurCase=h;
    	ca->occupee=o;
    	ca->condamnee=c;
    	ca->indiceX=x;
    	ca->indiceY=y;
    	ca->x=posx;
    	ca->y=posy;
    	return ca;
    }
    je fais un fichier test tout bete ou je créé une structure uneCase :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <stdlib.h>
    #include <stdio.h>
    #include "uneCase.h"
     
    int main(void){
     
    	uneCase *maCase;
    	maCase = NULL;
    	maCase = initUneCase(20,20,0,0,0,0,0,0);
    	printf("occcupee : %d\n", maCase->occupee);
    	return 0;
    }
    malheureusement j'ai à la compilation de mon fichier test.c l'erreure suivante :

    'struct <anonymous>' has no member named 'occupee' !

    alors que si je fais le test dans mon fichier uneCase.c cela marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef struct   {
    	double largeurCase;
    	double hauteurCase;
    	int occupee; //1 = il y a deja un cochon ou le gpl sur la case. 0 sinon.
    	int condamnee;//1 = la case est un trou beant. 0 sinon;
    	int indiceX, //permet de savoir ou se situe la case dans la grille.
    		indiceY;
    	double x, y; //abscisse et ordonnee de la case pour la representation graphique
    }uneCase;
     
     
    uneCase *initUneCase(double l,double h,int o,int c,int x,int y, double posx, double posy){
    	uneCase *ca= malloc(sizeof(uneCase));
    	ca->largeurCase=l;
    	ca->hauteurCase=h;
    	ca->occupee=o;
    	ca->condamnee=c;
    	ca->indiceX=x;
    	ca->indiceY=y;
    	ca->x=posx;
    	ca->y=posy;
    	return ca;
    }
     
    int main(void){
    	uneCase* maCase=NULL;
    	maCase= initUneCase(20,20,0,0,0,0,0,0);
    	printf("occcupé : %d\n", maCase->occupee);
    	maCase->occupee=1;
    	printf("occcupé : %i\n",maCase->occupee); 
    	return 0;
    }
    Je ne comprend pas l'érreure et comme je dois faire une programmation modulaire, je suis coincé...
    merci de m'aider !

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    La structure doit être déclarée dans un fichier d'en-tête (genre uneCase.h), et la fonction doit être déclarée dans le même fichier d'en-tête et définie dans uneCase.c.

    uneCase.h doit être inclus par uneCase.c et par le fichier contenant ton main().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2006
    Messages : 107
    Par défaut
    merci beaucoup pour ton aide, sa marche tres bien maintenant !

    (c'est fou le temps qu'on peut perdre pour une petite connerie ...)

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par apesle
    merci beaucoup pour ton aide, sa marche tres bien maintenant !

    (c'est fou le temps qu'on peut perdre pour une petite connerie ...)
    A lire d'urgence :

    http://emmanuel-delahaye.developpez....ganiser_source
    http://emmanuel-delahaye.developpez.....htm#organiser

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2006
    Messages : 107
    Par défaut
    merci pour tes liens tres interessants !

    J'ai encore un petit probleme bizarre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //calcul de la taille d'une case :
    	double largeurCase= (g->largeur)/(g->nombreDeCasesSurUnCote);
    	double hauteurCase= (g->hauteur)/(g->nombreDeCasesSurUnCote);
    	printf("calcul : %d\n",(g->largeur)/(g->nombreDeCasesSurUnCote));
    	printf("largeurCase : %d\n",largeurCase);
    l'instruction :
    printf("calcul : %d\n",(g->largeur)/(g->nombreDeCasesSurUnCote));
    me renvoit 160 : normale g->largeur = 800 et g->nombreDeCasesSurUnCote = 5
    l'instruction :
    printf("largeurCase : %d\n",largeurCase);
    me renvoit 0 .
    pourquoi ?

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    On n'affiche pas un double avec %d, mais avec %f.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. Probleme avec une structure sequentielle empilée
    Par kobalt02 dans le forum LabVIEW
    Réponses: 4
    Dernier message: 17/06/2009, 13h27
  2. Probleme avec une structure
    Par bouba69 dans le forum Débuter
    Réponses: 12
    Dernier message: 03/02/2008, 21h46
  3. Probleme avec une structure
    Par coco.cohen dans le forum C
    Réponses: 3
    Dernier message: 26/11/2007, 20h41
  4. Probleme avec une structure
    Par Fred2209 dans le forum C++Builder
    Réponses: 15
    Dernier message: 22/11/2006, 22h47
  5. probleme avec une "structure en arbre"
    Par kamouminator dans le forum C
    Réponses: 1
    Dernier message: 07/11/2006, 22h21

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