Sichtbahr? Aber wo?
-
Hallo,
ich verzweifel gerade an meinem Code und hoffe hier kann mir jemand helfen.
Ich habe folgende Dateien: cli.h , cli.c, test.h, und test.c
In der cli.h mache ich folgendes:struct befehl{ void (*Befehlszeiger)(void); void (*hilfe)(void); char Klartext[30];}
In der cli.c mache ich dann folgendes:
struct befehl befehlsliste[] ={ {&bla, &blubb, "TEXT"},{&bli, &blo, "Text2"}}
Wenn ich jetzt in der test.c auf befehlsliste zugreifen will, bekomme ich den Fehler: "befehlsliste undeclared (first use in this function)"
+test.c kennt die "cli.h"Was mache ich falsch? Ich hänge da jetzt schon so lange vor, dass ich den Wald vor lauter Bäumen nicht mehr sehe....
-
Und hast du in cli.h eine Deklaration von befehlsliste?
extern struct befehl befehlsliste[];
-
"befehlsliste undeclared (first use in this function)"
das sind die einzigen fehler?
...
mach mal ein semikolon nach der abschließenden klammer der struktur-deklaration.
-
Deine Vermutung ist richtig.
Du definierst in einer Quelldatei eine Variable und willst in einer anderen darauf zugreifen.
Eine Variable in C ist naturgemäß erstmal nur in ihrer Definitions-Quelldatei sichtbar, um sie für andere Quelldateien sichtbar zu machen benötigt es einer expliziten Deklaration, nehme also in der test.h diese Deklaration vor:extern struct befehl *befehlsliste;
Dass du den Strukturtyp in cli.h definiert hast, ist irrelevant, da hier nur der Typ bekannt gemacht wurde und nicht eine Variable dafür.
-