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 :

Conflits entre mes structures


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2007
    Messages : 143
    Points : 57
    Points
    57
    Par défaut Conflits entre mes structures
    Bonsoir a vous,
    J'ai une première structure [Liste doublement chaînée] pour gérer ma File et une seconde pour gérer mon graphe [Liste simplement chaînée]

    Mais voila si je mets les mêmes noms pour les champs de ces deux structures a la compilation il me jette...
    J'ai donc voulu créer une bibliothèque dynamique pour y inclure ma gestion de File. Mais ca ne résout pas le problème...

    Je m'y prends mal et ca devrait marcher??? Ou il n'y pas de solution (j'en doute lol)

    Merci d'avance. Selon votre réponse, j'exposerais la procédure que j'ai suivi pour créer ma bibliothèque dynamique.

  2. #2
    Membre expérimenté
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 011
    Points : 1 375
    Points
    1 375
    Par défaut
    On est pas devins, mets du code.

  3. #3
    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
    Citation Envoyé par line86 Voir le message
    Bonsoir a vous,
    J'ai une première structure [Liste doublement chaînée] pour gérer ma File et une seconde pour gérer mon graphe [Liste simplement chaînée]

    Mais voila si je mets les mêmes noms pour les champs de ces deux structures a la compilation il me jette...
    Il doit y avoir une autre raison. Présente le code en cause.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  4. #4
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2007
    Messages : 143
    Points : 57
    Points
    57
    Par défaut
    Le code fonctionne parfaitement si je modifie le nom de mes champs pour l'une ou l'autre de mes structures.

    Voila mes fichiers avant modifications

    /* Fichier Graphe.c */
    #include "Graphe.h"
    #include "File.h"

    /* Fichier File.c */
    #include "File.h"

    /* Fichier Main.c */
    #include "Graphe.h"

    Faut il une fois la bibliotheque crée, laisser #include "File.h" dans le Fichier Graphe.c

    Merci pour votre aide

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Comme l'a dit muad'dib, on n'est pas devins.
    On ne sait pas ce qu'il y a dans tes *^$ù*ù de headers, ni quelles sont tes erreurs, etc.
    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.

  6. #6
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 133
    Points : 169
    Points
    169
    Par défaut
    Il faudrait voir les options du compilateur. C'est gcc ? Il me semble qu'il y a une option pour référencer directement les membres des structures imbriquées.

  7. #7
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2007
    Messages : 143
    Points : 57
    Points
    57
    Par défaut
    oui mais mon code est long... et il n'y a pas d'erreurs dedans... C'est pour ca que je ne vois pas l'intérêt de mettre mon code
    C'est juste une question que si mes champs sont identique, la compilation ne passe pas...et pour palier a ce problème je voulais créer une bibliothèque pour enlever ce conflit...
    Ainsi je pensais ne plus avoir a mettre le File.h et le conflit aurait disparu...
    Mais je pense que ca ne doit pas etre possible...
    Car ca revient un peu au même que le type bool qu'ils sont rajouté dans la norme je ne sais plus cb du c pour éviter tous conflits ils les avaient appeler avec une spécification spéciale non? lol je suis pas expert je m'avance peut etre un peu de trop lol desolé si c'est le cas...

    [edit] oui c'est gcc sous debian...

    Merci encore

  8. #8
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 133
    Points : 169
    Points
    169
    Par défaut
    Si je me rappelle bien on peut avoir ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      struct a
     {
        int x ;
     } ;
     
     struct b 
     {
        struct a un_a ;
     };
    et utiliser indifféremment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      struct b un_b ;
     
          un_b.un_a.x = 4 ;
          un_b.x = 4 ;
    Ce qui fait qu'en nommant des membres de façon identique on peut avoir des erreurs de compilation.

    En règle générale il vaut mieux identifier chaque membre d'une structure avec un préfixe dérivé du nom de la structure (sauf en POO)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      struct element 
      {
         int ele_count ;
         char *ele_nom ;
      }
    Ca rend le code plus lisible.

  9. #9
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2007
    Messages : 143
    Points : 57
    Points
    57
    Par défaut
    Mes deux structures qui posent probleme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    /* Pour la File */
    typedef struct cell
    {
    struct cell *Suiv, *Prec;
    int Valeur;
    }Cellule, *Liste;
     
    /* Pour le graphe */
    typedef struct cell 
    {
     int Val;
     struct cell* Suiv;
    } Cellule,* Liste;

  10. #10
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 133
    Points : 169
    Points
    169
    Par défaut
    C'est le typedef en Cellule, et Liste aussi. On ne peut pas avoir le même nom de type pour les deux versions.

  11. #11
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    C'est normal que ça ne marche pas.
    Tes deux types ont le même nom et pas le même contenu ! Et ils sont utilisés tous les deux en même temps... Comment veux-tu que le compilateur sache lequel il doit choisir ?
    [alkama] quelqu'un est allé voir la guerre des mondes?
    [@Chrisman] j'espère pour spielberg
    --- bashfr.org

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ce ne sont donc pas les noms des champs qui sont identiques, mais ceux des structures elles-mêmes.
    Pourras-tu nous faire le plaisir d'exprimer ton problème correctement la prochaine fois ?
    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.

  13. #13
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2007
    Messages : 143
    Points : 57
    Points
    57
    Par défaut
    Desolé
    Je ferais plus attention la prochaine fois
    Merci de vous êtes penché sur mon problème
    Juste une dernière question...
    Ma bibliothèque n'aurait pas pu résoudre ce problème? Ou je m'y suis mal pris pour la construction de la bibliothèque

    Merci encore et dsl

  14. #14
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 943
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 943
    Points : 5 655
    Points
    5 655
    Par défaut
    Kio,
    Citation Envoyé par line86 Voir le message
    oui mais mon code est long... et il n'y a pas d'erreurs dedans... C'est pour ca que je ne vois pas l'intérêt de mettre mon code
    Il faut oser écrire ça.

    S'il n'y avait pas d'erreur, tu n'aurais pas besoin d'aide. CQFD.
    Si les cons volaient, il ferait nuit à midi.

  15. #15
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 133
    Points : 169
    Points
    169
    Par défaut
    Citation Envoyé par line86 Voir le message
    Desolé
    Je ferais plus attention la prochaine fois
    Merci de vous êtes penché sur mon problème
    Juste une dernière question...
    Ma bibliothèque n'aurait pas pu résoudre ce problème? Ou je m'y suis mal pris pour la construction de la bibliothèque

    Merci encore et dsl
    Pour résoudre ce problème il faut

    a) nommer ses structures précisément, ici Liste_Simple, et Liste_Double, pareil pour Cellule_Simple et Cellule_Double

    b) dériver ses structures : créer une structure Cellule et deux structures Cellule_Simple et Cellule_Double qui contiennent Cellule, ce qui permet d'écrire des fonctions qui utilisent indifféremment les deux.

    c) passer au C++. C'est le genre de cas typique où la réécriture en C++ est avantageuse.

  16. #16
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2007
    Messages : 143
    Points : 57
    Points
    57
    Par défaut
    Merci pour votre aide bonne soirée

    droggo: Il faut oser écrire ça.'il n'y avait pas d'erreur, tu n'aurais pas besoin d'aide. CQFD.
    J'ai osé alors lol

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

Discussions similaires

  1. Possibles conflits entre GL, GLAUX et GLUT
    Par barthelv dans le forum GLUT
    Réponses: 1
    Dernier message: 19/11/2004, 12h31
  2. Conflit entre bases de données
    Par BRODU dans le forum Bases de données
    Réponses: 4
    Dernier message: 18/10/2004, 11h40
  3. conflit entre couleurs
    Par khayyam90 dans le forum OpenGL
    Réponses: 2
    Dernier message: 03/07/2004, 18h00
  4. [Rave et base] liason entre mes 2 tables
    Par Pascal dans le forum Bases de données
    Réponses: 2
    Dernier message: 16/06/2004, 17h19
  5. [Technique] Conflits entre plusieurs requêtes
    Par Neowile dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 24/03/2003, 09h37

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