Hallo Weiss wirklich niemand, wie man folgendes in ein Header File main.h verpackt. Mein main.c lautet folgendermassen: struct drink1 { unsigned char menge_orangensaft; unsigned char menge_vodka; }drink_screwdriver={12,4}; void main (void) { Programm... } ich habe nun daraus folgendes main.h file gemacht: #ifndef main_h #define main_h extern struct drink1 { unsigned char menge_orangensaft; unsigned char menge_vodka; }drink_screwdriver; #endif leider habe ich laufend errormeldungen. Weiss jemand, wie man eine Struktur im Header File implementiert?? drink1 ist der Strukturname und drink_screwdriver der Variabelname der Struktur... Bitte helft mir Danke
Du musst ein typedef machen. also typedef struct { unsigned char menge_orangensaft; unsigned char menge_vodka; }drink1; und dann drink1 drink_screwdriver; extern verwendest du nur wenn die Variable woanders definiert ist, hier jedoch nicht.
noch eine frage: Das "drink1 drink_screwdriver;" kommt dan ins headerfile und es ist richtig,dass das extern weggelassen werden muss, auch wenn ich es in anderen c files im gleichen projekt auch noch verwende? danke
Das "drink1 drink_screwdriver;" kannst du hintun wo du willst. Normalerweise macht man das Typedef ins Headerfile. In genau einem File machst das "drink1 drink_screwdriver;", in allen anderen Files dann (wenn du die Variable dort brauchst) ein extern drink1 drink_screwdriver;
dies funktioniert bei mir nicht so toll. Also, hab folgendes gemacht: im main.c steht folgendes: typedef struct drink1 { unsigned char menge_orangensaft; unsigned char menge_vodka; }drink_screwdriver={12,4}; drink1 drink_screwdriver; void main(void) { programm... } im headerfile main.h steht folgendes: extern drink1 drink_screwdriver; wieso läuft es immer noch nicht??
Hallo Mike, andersherum wird da wohl besser ein Schuh draus: --------------------------main.h------------------------------------- #ifndef main_h #define main_h typedef struct drink1 { unsigned char menge_orangensaft; unsigned char menge_vodka; }; #endif -------------------------main.h--------------------------------------- -------------------------main.c--------------------------------------- #include "main.h" drink1 drink_screwdriver = {12,4}; void main(void) { programm... } ------------------------main.c---------------------------------------- mit dem Aufruf: typedef struct drink1 { unsigned char menge_orangensaft; unsigned char menge_vodka; }drink_screwdriver={12,4}; Hast du IMHO etwas anderes gemacht. Du hast sowohl eine structure drink1 als auch eine structure drínk_screwdriver generiert, letzte hat defaultmäßig die Werte 12, 4. Die Hauptfrage ist noch, welche Art von compiler Du benutzt. Es kann Dir bei diesem Aufruf passieren, das nur drink1 als structure erzeugt wird, oder nur drink_screwdriver oder beide. Falls Dein Compiler im singlepass Modus arbeitet, erzeugt er drink1, falls er den Multipassmodus kennt, erzeugt er drink_screwdriver und gegebenfalls auch drink1. Also kurz, Du hast zwei Strukturen erzeugt, die bis auf die Initialisation identisch sind, aber keine Variable erzeugt. Somit kannst Du auch mit der structure nicht arbeiten. Entweder verwende bitte: typedef struct <Typ> { ..... }; oder typedef struct { .... } <Typ>; Der Aufruf ist dabei Compilerabhängig. Standartconformer ist der erste! Gruß Marcus PS: Versuch mal bitte den oberen code.
also marcus würde dies gerne probieren, jedoch komme ich nicht ganz draus, was du mir da erzählen willst. Kannst du mir bitte in das untenstehende eintragen, wie das aussehen soll?: --------------------------main.h------------------------------------- #ifndef main_h #define main_h #endif -------------------------main.h--------------------------------------- -------------------------main.c--------------------------------------- #include "main.h" void main(void) { programm... }
--------------------------main.h------------------------------------- #ifndef main_h #define main_h typedef struct drink1 { unsigned char menge_orangensaft; unsigned char menge_vodka; }; #endif -------------------------main.h--------------------------------------- -------------------------main.c--------------------------------------- #include "main.h" drink1 drink_screwdriver = {12,4}; void main(void) { programm... } ------------------------main.c----------------------------------------
@mike: Mein Beispiel war schon richtig, aber du hast es falsch abgetippt. typedef definiert dir eine structur mit einem namen, aber es ist deswegen noch kein Speicher reserviert. typedef { int a; int b; } mystruct; sagt dem Compiler nur wie die Struktur mystruct aussieht; mystruct abc; erzeugt eine Variable abc die eine Struktur hat wie sie in mystruct definiert ist, es geht also (glaub ich): mystruct abc{1,2}; aber nicht so wie du es geschrieben hast.
sorry, bin wohl einwenig verwirrt ;o) werde den code gleich mal ausprobieren. Bitte an der Tastatur bleiben ;o)
ok fritz, werde beide codes von euch mal durchspielen und sage euch dan, wer als gewinner vom platz geht ;o)
Hallo Mike, ich habe mit den Code von Deinem Posting von 15:48h angeschaut. Fritz und ich haben Dir im Grunde - unabhängig - den selben code geschickt. Fritz erzeugt die structure ohne dem Compiler expliziet zu sagen, das es sich um eine structure handelt, ich sags ihm nochmal expliziet. Ist Geschmackssache! Den Code von Fritz habe ich irgendwie überlesen - Sorry Fritz!
ok, ich habe folgendes programmiert: --------------------------main.h------------------------------------- #ifndef main_h #define main_h typedef struct { unsigned char menge_orangensaft; unsigned char menge_vodka; }drink1 ; #endif -------------------------main.h--------------------------------------- -------------------------main.c--------------------------------------- #include "main.h" drink1 drink_screwdriver = {12,4}; void main(void) { programm... } ------------------------main.c---------------------------------------- Nun beschwert sich der compiler in den anderen xxx.c files in meinem projekt, "Error[Pe020]: identifier "drink_screwdriver" is undefined " Ich habe in jedem anderen xxx.c file im kopf oben #include "main.h" geschrieben, somit sollte er die structur doch kennen.....
Im anderen C File musst noch reinschreiben: extern drink1 drink_screwdriver; dann kennt er es. Mit dem Includefile kennt er nur die Struktur als Type , aber nicht die Variable.
aber wenn ich in verschiedenen anderen c files auf diese struktur zugriff haben soll, kann ich das extern drink1 drink_screwdriver doch auch ins headerfile des main.h schmeissen?oder? oder muss ich in jedem xxx.c file das extern implementieren?
Ist eigentlich egal, aber: Ein File muss es ohne extern haben, die anderen mit extern. Ich mach die extern variablen nie in den Header, sondern trage ins .c File nur die Variablen ein, die ich da auch verwende. Dann hab ich auch eher den Überblick.
ja, im main.c habe ich ja folgendes geschrieben drink1 drink_screwdriver{15;3}; nun kann ich also ins main.h file "extern drink1 drink_screwdriver" schreiben zuzüglich dem typdef struct.... und dieses in den funktionen, bei welchen ich auf drink_screwdriver zugreiffen muss das main.h includen, oder???
Die Typedef auf jeden Fall. das "extern..." sollte aber nicht im main.c includiert sein, ich weiss nicht ob das der Compiler frisst. Sonst musst es für main.c über #ifdef rausnehmen. Einfach nachdenken und ausprobieren, du willst ja das Programm schreiben , nicht ich.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.