Forum: Compiler & IDEs error: array type has incomplete element type


von Gast (Gast)


Lesenswert?

Hallo,

ich versuche gerade in b.c auf das in a.c definierte
1
struct mystruct array[] = {...}

zuzugreifen (mystruct in a.h)

Ohne Weiteres gibt das einen error (
1
'array' undeclared here
).

Daher also in b.h die Deklaration
1
extern struct mystruct array[]

aber:
1
error: array type has incomplete element type

Das ist wohl nicht mehr gültig, aber alles, was ich probiert habe, führt 
zu nix.

von Stefan E. (sternst)


Lesenswert?

In b muss auch die komplette Definition von "struct mystruct" bekannt 
sein.

von Gast (Gast)


Lesenswert?

Das sollte über die Header sichergestellt sein; wenn ich eine Kopie von 
struct mystruct in b.h kopiere gibt es
1
b.h error: redefinition of 'struct mystruct'

von Stefan E. (sternst)


Lesenswert?

Gast schrieb:
> Das sollte über die Header sichergestellt sein

Dann hast du es aber nicht vor der Array-Deklaration inkludiert.

von anderer Gast (Gast)


Lesenswert?

Könnte das vielleicht was mit [] zu tun haben? Vielleicht braucht der ja 
ne exakte größe oder nen \0??

von Gast (Gast)


Lesenswert?

> Dann hast du es aber nicht vor der Array-Deklaration inkludiert.
Verstehe dich nicht ganz.
mystruct wird in a.h deklariert.
a.h wird vor b.h eingebunden (in main.h).

Die exakte Größe (Anzahl der structs mystruct) bringt leider nichts.

mystruct enthält mystruct2, das vor mystruct in a.h deklariert wird.
Könnte das ein Problem darstellen?

von Gast (Gast)


Lesenswert?

Hier ein Link zur Feststellung:
http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_047.html

Gibt es irgendwo eine ausführliche Erklärung zur Fehlermeldung?

von Stefan E. (sternst)


Lesenswert?

Gast schrieb:
>> Dann hast du es aber nicht vor der Array-Deklaration inkludiert.
> Verstehe dich nicht ganz.
> mystruct wird in a.h deklariert.
> a.h wird vor b.h eingebunden (in main.h).

Aha, und was wird wie in b.c eingebunden?

> mystruct enthält mystruct2, das vor mystruct in a.h deklariert wird.
> Könnte das ein Problem darstellen?

Vielleicht solltest du mal dazu übergehen, richtigen Code zu posten, 
statt unvollständiger Beschreibungen.

von Gast (Gast)


Angehängte Dateien:

Lesenswert?

Danke für die Hilfsbereitschaft, anbei ein 'testcase'.

von Stefan E. (sternst)


Lesenswert?

Du inkludierst doch b.h vor den Strukturdefinitionen. Du hast bei den 
gegenseitigen Includes (die übrigens ziemlich unsinnig sind) den 
Überblick verloren, was eigentlich genau passiert.

In a.h steht ein include main.h vor den Strukturdefinitionen. In main.h 
steht ein include a.h und b.h. In a.h sind wir ja aber gerade, also wird 
wegen des Include-Guards a.h hier nicht inkludiert (würde ja sonst auch 
eine Endlosschleife geben), sondern nur b.h. Also wird hier b.h vor den 
Strukturdefinitionen eingefügt.

von Gast (Gast)


Lesenswert?

Danke. Die Logik der includes habe ich noch nicht ganz durchschaut, 
werde es überarbeiten. Schönes Wochenende!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.