mikrocontroller.net

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


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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

zuzugreifen (mystruct in a.h)

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

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

aber:
error: array type has incomplete element type

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

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In b muss auch die komplette Definition von "struct mystruct" bekannt 
sein.

Autor: Gast (Gast)
Datum:

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

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gast schrieb:
> Das sollte über die Header sichergestellt sein

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

Autor: anderer Gast (Gast)
Datum:

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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Hilfsbereitschaft, anbei ein 'testcase'.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.