Union in Struct Error

J’ai la structure suivante:

struct type1 { struct type2 *node; union element { struct type3 *e; int val; }; }; 

Lors de l’initialisation d’un pointeur *f f.element->e sur une instance de type1 et faisant quelque chose comme: f.element->e ou même tout simplement f.element , je reçois

 error: request for member 'element' in something not a structure or union 

Qu’est-ce que je supervise ici?

element est le nom de l’union et non le nom d’un membre de type1 . Vous devez donner un nom union element :

 struct type1 { struct type2 *node; union element { struct type3 *e; int val; } x; }; 

alors vous pouvez y accéder en tant que:

 struct type1 *f; f->xe 

Si f est un pointeur, vous pouvez accéder à “element” en utilisant f-> element ou (* f) .element

Mise à jour: je viens de voir que “élément” est le nom de l’union, pas un membre de la structure. Vous pouvez essayer

 union element { struct type3 *e; int val; } element; 

Donc, la structure finale serait comme ceci:

 struct type1 { struct type2 *node; union element { struct type3 *e; int val; } element; }; 

Et maintenant, vous pouvez accéder aux membres d’éléments comme ceci, via un type1 * f:

 struct type1 *f; // assign f somewhere f->element.val;