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 :

Références mutuelles dans les structures


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 172
    Points : 117
    Points
    117
    Par défaut Références mutuelles dans les structures
    Bonjour,

    Voilà mon problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    typedef struct
    {
         STRUCT_2* struct2;
    } STRUCT_1;
     
    typedef struct
    {
         STRUCT_1* struct1;
    } STRUCT_2;
    Quelqu'un sait comment faire pour que ça passe à la compil ?
    J'aimerais si possible éviter d'avoir à passer un des champs en void* et caster à chaque utilisation...

    Merci d'avance

    EDIT : bon apparemment, faire ça, ça marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    typedef struct st2 STRUCT_2;
     
    typedef struct
    {
         STRUCT_2* struct2;
    } STRUCT_1;
     
    typedef struct st2
    {
         STRUCT_1* struct1;
    } STRUCT_2;
    Après faut voir si ça fait les choses correctement...

  2. #2
    Membre averti
    Avatar de Chatanga
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 211
    Points : 346
    Points
    346
    Par défaut
    Si tu peux faire du C++ plutôt que du C, il y a plus simple.

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    #ifdef __cplusplus
     
    	struct st2; // Ceci est une "forward declaration".
     
    	struct st1
    	{
    		 st2 * struct2;
    	}
    	uneStructure1,
    	uneAutreStructure1;
     
    	struct st2
    	{
    		 st1 * struct1;
    	}
    	uneStructure2,
    	uneAutreStructure2;
     
    	// Le mécanisme de "typedef struct" du C pur est aussi valable en C++.
     
    #else // C pur
     
    	struct st2;
     
    	struct st1
    	{
    		struct st2 * struct2;
    	}
    	uneStructure1;
     
    	struct st2
    	{
    		struct st1 * struct1;
    	}
    	uneStructure2;
     
    	/*** Autre possibilité ***/
     
    	//struct variante_st2; -> Cette "forward declaration" est rendue implicite par la ligne suivante.
     
    	typedef struct variante_st2 alias_variante_st2; // Ceci n'est pas une "forward declaration" mais juste un "typedef" !
     
    	typedef struct variante_st1
    	{
    		alias_variante_st2 * struct2;
    	}
    	alias_variante_st1;
     
    	alias_variante_st1 uneAutreStructure1;
     
    	/*typedef*/ struct variante_st2
    	{
    		alias_variante_st1 * struct1;
    	}
    	/*alias_variante_st2*/;
     
    	alias_variante_st2 uneAutreStructure2;
     
    #endif
     
    int main (int argc, char * const argv[])
    {
    	uneStructure2.struct1 = &uneStructure1;
     
    	uneAutreStructure2.struct1 = &uneAutreStructure1;
     
    	return 0;
    }

  3. #3
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    typedef struct
    {
    	     struct st2* struct2;
    } STRUCT_1;
     
    typedef struct st2
    {
    	     STRUCT_1* struct1;
    } STRUCT_2;
    Ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    typedef struct st2 STRUCT_2;
     
    typedef struct
    {
    	     STRUCT_2* struct2;
    } STRUCT_1;
     
    struct st2
    {
    	     STRUCT_1* struct1;
    };
    To start press any key. (reading screen) Where's the "any" key? I see Esc, Catarl, and Pig Up. There doesn't seem to be any "any" key. Wo! All this computer hacking is making me thirsty. I think I'll order a Tab. (presses TAB key). -- HOMER --

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

Discussions similaires

  1. Références croisées dans les classes
    Par Sve@r dans le forum Général Python
    Réponses: 8
    Dernier message: 13/01/2012, 18h02
  2. question sur les pointeurs dans les structures!
    Par bilal_sayed1 dans le forum Débuter
    Réponses: 1
    Dernier message: 19/02/2010, 07h33
  3. Utiliser des Filler dans les structures avec ACCEPT
    Par beegees dans le forum Cobol
    Réponses: 2
    Dernier message: 13/01/2008, 19h09
  4. Débutant dans les structures binaires
    Par dot-_-net dans le forum C
    Réponses: 3
    Dernier message: 19/10/2007, 19h46
  5. Coherence dans les structures arborescentes...
    Par Alec6 dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 29/09/2004, 12h04

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