Seite 1 von 1

[C] dereferencing pointer to incomplete type

Verfasst: 10.12.2011 08:42
von dllfreak2001
Moin,
ich habe folgendes Problem:
Zielsystem QNX
Ich habe einen Header in dem ist eine Struktur angelegt.

Code: Alles auswählen

struct a
{
     int f[200]

};
Ich habe eine Main.c in der wird ein Zeiger von ihr erzeugt und zwar vor der main-Schleife und damit eigentlich
global. Das hier wird ein shared Memory der mit shmem_open und ftruncate zur Laufzeit in der main-Funktion erstellt wird.

Code: Alles auswählen

struct a * hans;
Die grafische Oberfläche arbeitet mit folgender Funktion: PtMainloop()
Diese fragt die Gui meines Programms ab und ruft Callback Funktionen auf die in extra c-dateien liegen.

Wenn ich nun dort (im callback) auf hans zugreifen will kommt der Fehler aus dem Threadtitel.

ich mache das normalerweise so:

Code: Alles auswählen

extern struct a * hans;

int callback(){

 hans -> f[0] = 3;

}

Wenn ich den Header in die Callback-Datei einfüge meckert er beim Build:

incomplete type in 'header'

Auf normale Variablen kann ich auf diese Weise problemlos zugreifen. Das hier ist alles nicht
1:1 Code weil der durch easy-code unansehnlich gemacht wurde und ich auch auf diesem Rechner
keines habe.

Ich hoffe man versteht was ich meine.

:praise: Bitte helft mir...

Re: [C] dereferencing pointer to incomplete type

Verfasst: 10.12.2011 09:03
von NicTheQuick
Versuch mal folgende Deklaration für deine Struktur:

Code: Alles auswählen

typedef struct
{
     int f[200]

} a;
Und danach einfach nur

Code: Alles auswählen

a * hans;
Das 'struct' musst und sollst du nicht immer mit rumschleppen.

Die Informationen hab ich übrigens aus dem ersten Link, den man bei Google findet, wenn man nach deinem Threadtitel sucht; dereferencing pointer to incomplete type

Re: [C] dereferencing pointer to incomplete type

Verfasst: 10.12.2011 19:12
von dllfreak2001
Na mal schauen,

ich komme nur in der Uni an das Zielsystem ran, dann werde ich es mal testen.

Ich habe eigentlich immer gedacht, typedef hat im Endeffekt keine direkten Auswirkungen.

Re: [C] dereferencing pointer to incomplete type

Verfasst: 22.12.2011 22:52
von miscalculated
Ein typedef sollte da keine Auswirkungen haben. Du musst in der Datei mit den Callbacks (und allen anderen Dateien, die einen Pointer der struct dereferenzieren) den Header mit der Definition der struct #includen.

Re: [C] dereferencing pointer to incomplete type

Verfasst: 23.12.2011 12:07
von dllfreak2001
Wenn ich das mache, dann haut mir der Compiler folgende Fehlermeldung raus.

"header type not complete"

Das ist alles irgendwie nicht nachvollziehbar, weil er dann auch den Header der vom GUI-Designer für
die Widgets erstellt wurde beschimpft.
Wohlgemerkt in der Main-File funktionieren die Header perfekt.

Allerdings kam ich noch nicht an das Zielsystem ran, hier kann ich den Code nicht compilieren.

Re: [C] dereferencing pointer to incomplete type

Verfasst: 24.12.2011 02:40
von miscalculated
Mit der Meldung "header type not complete" oder "incomplete type in header" kann ich nichts anfangen, aber wenn du mit header in dem Fall den Dateinamen der Headerdatei meinst, dann hat eventuell eines der Elemente der struct einen benutzerdefinierten Typ? Ich kenn mich mit dem Zielsystem nicht konkret aus, aber ich könnt mir vorstellen, dass du in der struct einen Typen benutzt der in einem Header des GUI Systemes definiert wird, diesen musst du dann auch in der C-Datei mit den Callbacks auch #includen und nicht nur in der Main.c

Re: [C] dereferencing pointer to incomplete type

Verfasst: 28.01.2012 14:20
von dllfreak2001
Ok, hier die Auflösung.

Wie so oft habe ich mich wieder verguckt. Mir fehlte tatsächlich nur ein Header.
Jetzt funktioniert es einwandfrei.

Re: [C] dereferencing pointer to incomplete type

Verfasst: 28.01.2012 20:06
von WPö
dllfreak2001 hat geschrieben:

Code: Alles auswählen

struct a {
  int f[200]
};
Moin!
Nur mal nebenbei: Sollte da nicht ein Semikolon am Schluß der int-Zeile stehen?

Gruß - WPö