Struct à l'intérieur de la structure
Je dois créer une personne et chaque personne devrait avoir un réfrigérateur. Est-ce la meilleure façon de le faire? Si c'est le cas, que fais-je de travers? Merci d'avance.
typedef struct {
int age;
struct FRIDGE fridge;
} PERSON;
typedef struct {
int number;
} FRIDGE;
FRIDGE fr;
fr.number=1;
PERSON me;
me.name=1;
me.fridge = fr;
Cela me donne l'erreur suivante:
erreur: le champ ‘réfrigérateur’ est de type incomplet
struct FRIDGE
est quelque chose de différent de FRIDGE
.
Vous devez soit utiliser le type FRIDGE
dans votre autre structure.
typedef struct {
int age;
FRIDGE fridge;
} PERSON;
ou définissez votre réfrigérateur comme struct FRIDGE
struct FRIDGE {
int number;
};
En outre, il peut être nécessaire de définir la structure avant de l’utiliser (par exemple, au-dessus de la personne).
Vous devez utiliser les membres de FRIDGE
après avoir supprimé tous les avertissements et les erreurs. Déclarez FRIDGE
avant PERSON
me.fridge.number = 1
ÉDITÉ: J'ai trouvé le bogue. Vous utilisez une structure anonyme, vous ne devez donc pas utiliser le mot clé struct
mais utiliser le nom typedef
ed.
Remplacez struct FRIDGE fridge
par FRIDGE fridge
Soit la déclaration en aval de struct FRIDGE;
Ou,
donnez la définition de FRIDGE
avant de l'utiliser dans struct PERSON
L'utilisation de typedefs avec vos structures vous mènera à ce type d'enchevêtrement. Le mot-clé struct situé devant un identificateur de balise struct est la façon dont les structures sont censées être utilisées. Ceci est également plus explicite et plus facile à lire.
Il y a un long et bon article sur le blog avec tous les détails ici https://www.microforum.cc/blogs/entry/21-how-to-struct-lessons-on-structures-in-c/
Mais en bref, ce que vous voulez vraiment faire, c’est laisser de côté le typedef
struct FRIDGE; // This is a forward declaration, now an incomplete type
struct PERSON{
int age;
struct FRIDGE fridge;
};
struct FRIDGE{
int number;
};
struct FRIDGE fr;
fr.number=1;
struct PERSON me;
me.name=1;
me.fridge = fr;
Linus Torvalds a également parlé de cela une fois, raison très solide pour laquelle l’utilisation de typedefs sur toutes vos structures est déroutante et mauvaise.