Struct struct innen
Ich muss eine Person und jede Person sollte einen Kühlschrank. Ist dies der beste Weg, es zu tun? Wenn ja, was mache ich falsch? Vielen Dank 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;
Dies gibt mir die folgende Fehlermeldung:
Fehler: Feld 'Kühlschrank' hat unvollständigen Typ
- Sie sind mit anonymen Struktur, so sollten Sie nicht verwenden die
struct
keyword, sondern verwenden Sie dietypedef
'ed Namen. Ändernstruct FRIDGE fridge
zuFRIDGE fridge
- Bearbeiten Sie den code in der Frage ist der falsche Weg, Sie zu beantworten. Bearbeiten Sie die Frage nur code zu beheben miserable Formatierung, wie falsche Einrückung.
- Punkt Beachten!!!
Du musst angemeldet sein, um einen Kommentar abzugeben.
struct FRIDGE
ist etwas anderes, alsFRIDGE
.Müssen Sie entweder geben Sie
FRIDGE
in Ihrer sonstigen Struktur.oder definieren Sie Ihren Kühlschrank als
struct FRIDGE
Auch die Struktur kann definiert werden müssen, bevor Sie es verwenden (z.B. über die person).
Verwenden Sie die Mitglieder der
FRIDGE
, nach dem entfernen alle Warnungen und Fehler. ErklärenFRIDGE
vorPERSON
me.fridge.number = 1
BEARBEITET: ich fand den Fehler. Sie sind mit anonymen Struktur, so sollten Sie nicht verwenden die
struct
keyword, sondern verwenden Sie dietypedef
ed Namen.Ändern
struct FRIDGE fridge
zu
FRIDGE fridge
FRIDGE
, der Fehler ist Weg. Es ist immer ratsam, um Werte zuzuweisen, um die Struktur der Mitglieder und nicht die gesamte Struktur, es sei denn, etwas wiememset
. Dies vermeidet Fehler in der Zukunft, wenn mehr Struktur Mitglieder werden aufgenommen, um es in der Erklärung.fr
initialisiert der Mitglied, und dann bist du gerade dabei, die Struktur in die andere Struktur. Es wird zwar kein Fehler auf, wenn Sie mehr Mitglieder hinzufügen. (Zusätzlich, manchmal möchte ich meinen code, um Fehler beim zugrunde liegenden Strukturen erweitert werden. Es kann eine sinnvolle Erinnerung an fehlende Initialisierung.)int
.struct A { struct B xyz;};
der vorhergehenden Zeile solltestruct B;
oder eine vollständige definition desstruct B
wie sonst würde der compiler berechnen Sie die Größe derstruct B
und wissen, wie viel Speicher zu reservieren, um Ihre endgültigestruct A
??bug
und aktualisiert meine Antwort. Check it out, und würden Sie mir das entfernen derdown-vote
aus meine Antwort !!Entweder die vorwärts-Deklaration von
struct FRIDGE;
Oder,
geben Sie die definition von
FRIDGE
vor der Verwendung in structPERSON
Verwendung von typedefs mit Ihren Strukturen erhalten, die Sie in dieser Art von Verwicklung. Das struct-Schlüsselwort vor ein struct tag-Bezeichner ist wie Strukturen eingesetzt werden sollen, ist dies auch eindeutiger und leichter zu Lesen.
Es ist eine lange und schöne blog-post mit allen details hier
https://www.microforum.cc/blogs/entry/21-how-to-struct-lessons-on-structures-in-c/
Aber in Kürze, was Sie wirklich wollen, zu tun ist, verlassen sich die typedef ist wie diese
Linus Torvalds ging auch auf diesem einst sehr solide Argumentation, warum mit typedefs auf all Ihren Strukturen ist verwirrend und schlecht.
https://yarchive.net/comp/linux/typedefs.html