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.




Anmelden zum Antworten