Ich muss eine Person erstellen und jede Person sollte einen Kühlschrank haben. Ist dies der beste Weg, dies zu tun? Wenn ja, was mache ich falsch? Danke im Voraus.
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;
Das gibt mir den folgenden Fehler:
fehler: Feld "Kühlschrank" hat unvollständigen Typ
struct FRIDGE
ist etwas anderes als FRIDGE
.
Sie müssen entweder den Typ FRIDGE
in Ihrer anderen Struktur verwenden.
typedef struct {
int age;
FRIDGE fridge;
} PERSON;
oder definieren Sie Ihren Kühlschrank als struct FRIDGE
struct FRIDGE {
int number;
};
Möglicherweise muss die Struktur vor der Verwendung definiert werden (z. B. über der Person).
Sie müssen Mitglieder von FRIDGE
verwenden, nachdem Sie alle Warnungen und Fehler entfernt haben. Deklarieren Sie FRIDGE
vor PERSON
me.fridge.number = 1
BEARBEITET: Ich habe den Fehler gefunden. Sie verwenden eine anonyme Struktur. Verwenden Sie daher nicht das Schlüsselwort struct
, sondern den Namen typedef
ed.
struct FRIDGE fridge
in FRIDGE fridge
ändern
Entweder die Vorwärtsdeklaration von struct FRIDGE;
Oder,
geben Sie die Definition von FRIDGE
an, bevor Sie sie in struct PERSON
verwenden.
Durch die Verwendung von Typedefs mit Ihren Strukturen werden Sie in diese Art von Verwirrung geraten. Das Schlüsselwort struct vor einem struct-Tag-Bezeichner gibt an, wie Struktu- ren verwendet werden sollen. Dies ist auch expliziter und leichter lesbar.
Es gibt einen langen und guten Blog-Post mit allen Details hier https://www.microforum.cc/blogs/entry/21-wie-nach-struktur-lose-ononstruktur-in-c/
Kurz gesagt, was Sie wirklich tun wollen, ist, die Typedefs so wegzulassen
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 hat dies auch schon einmal gesagt, eine sehr solide Begründung, warum die Verwendung von Typedefs für alle Ihre Strukturen verwirrend und schlecht ist.