[C] dereferencing pointer to incomplete type

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

[C] dereferencing pointer to incomplete type

Beitrag 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...
I´a dllfreak2001
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: [C] dereferencing pointer to incomplete type

Beitrag 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
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Re: [C] dereferencing pointer to incomplete type

Beitrag 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.
I´a dllfreak2001
miscalculated
Beiträge: 4
Registriert: 11.04.2011 18:17

Re: [C] dereferencing pointer to incomplete type

Beitrag 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.
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Re: [C] dereferencing pointer to incomplete type

Beitrag 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.
I´a dllfreak2001
miscalculated
Beiträge: 4
Registriert: 11.04.2011 18:17

Re: [C] dereferencing pointer to incomplete type

Beitrag 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
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Re: [C] dereferencing pointer to incomplete type

Beitrag 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.
I´a dllfreak2001
Benutzeravatar
WPö
Moderator
Beiträge: 669
Registriert: 27.05.2008 12:44
Wohnort: Oberland
Kontaktdaten:

Re: [C] dereferencing pointer to incomplete type

Beitrag 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ö
Ich glaube nur der Statistik, die ich selbst gefälscht habe!
Meine Netzpräsenz: WPö.de
PB5.31 auf LMDE und Pentium T7200 2,00GHz, 4GB DDR2, ATI X1400.
Antworten