G++ Compiler Error : field ‘xyz’ has incomplete type, Pointer funktioniert Strutkurelement nicht
-
Hallo Freunde der Sonne,
ich lerne zurzeit C++ und wollte mal eine verkettete Liste Programmieren. Dazu habe ich mir ein Struct wie folgt erstellt :struct knoten { int daten; struct knoten* next; };Mir ist nun aufgefallen das wenn ich den Indirektionoperator "*" vergesse, sprich kein Pointer erstelle, ich folgende Fehlermeldung bekomme :
field ‘next’ has incomplete type
Aber wenn es als Pointer definiert wird, funktioniert alles tadellos. Liegt das daran das ein Pointer immer die selbe Speichergröße nur braucht und sich eigentlich nicht kümmern muss um was es sich für einen Typ es sich handelt ?
Oder wie kann man sich das erklären ?
Danke für die Hilfe

-
Ein Zeiger auf Knoten ist nicht der gleiche Type wie ein Knoten!
-
Hallo,
Du kannst nur einen Zeiger auf den Knoten in die Struktur aufnehmen, da der Datentyp "knoten" zu diesem Zeitpunkt noch unvollständig ist, was bedeutet, dass der Compiler keine genauen Informationen über die Größe hat. Es wäre auch fatal, wenn die Lösung ohne Zeiger funktionieren würde: Es würde unendlich viel Speicher verbraucht. (Da ja jeder Knoten wiederum einen knoten besitzt, für den wiederum auch Speicher bereitgestellt werden muss.) Ein Zeiger allerdings benötigt nur 32 Bits an Speicher und ist bei der Deklaration noch undefiniert, es wird also kein Speicher reserviert, auf den der Zeiger zeigt.
MfG, Jochen
-
Ja. Man kann nur Objekte erstellen, bei denen vollständig klar ist, wie groß diese sind. Deshalb kann man keine Objekte von einem unvollständigen Typen erstellen. Bei einem Zeiger ist jedoch die Größe klar, deshalb kann man auch Zeiger auf unvollständige Typen haben.
Jochen S. schrieb:
Ein Zeiger allerdings benötigt nur 32 Bits an Speicher
Komisch, bei mir nicht. Ist mein Compiler kaputt?
-
Danke für eure Antworten. Nun ist alles Sonnenklar

-
Ausserdem schreibst du C. In C++ schreibt mann nur struct für die Typendeklaration/-definition als Member lässt man es weg.