Struct und Module
-
Hallo
ich habe das Problem das ich Strukturen nicht an sekundäre Module übergeben kann.
Folgendes Programm funktioniert wunderbar!#include <stdio.h> struct record_format { char name[20]; int age;}; void display(struct record_format); /************************************************************************/ main () { char name2[20]="Joe Brown"; struct record_format record; strcpy(record.name,name2; record.age = 21; display (record); printf("name is %s \nage is %d \n", record.name, record.age); } /************************************************************************/ void display(struct record_format rec) { printf("name is %s \nage is %d \n", rec.name, rec.age); rec.age=31; }
Mache ich aber Module daraus.... nur als Test!
Main.c
#include <stdio.h> #include <string.h> #include "sek.h" struct record_format { char name[20]; int age;}; /************************************************************************/ main () { char name2[20]="Joe Brown"; struct record_format record; strcpy(record.name,name2 ); record.age = 21; display (record); printf("name is %s \nage is %d \n", record.name, record.age); } /************************************************************************/
sek.c
#include <stdio.h> #include "sek.h" void display(struct record_format rec) { printf("name is %s \nage is %d \n", rec.name, rec.age); rec.age=31; }
sek.h
/*sek.h*/ void display(struct record_format rec);
Hagelt es GCC Fehler
In file included from main.c:3: sek.h:3: warning: 'struct record_format' declared inside parameter list sek.h:3: warning: its scope is only this definition or declaration, which is probably not what you want main.c: In function 'main': main.c:21: error: type of formal parameter 1 is incomplete In file included from sek.c:2: sek.h:3: warning: 'struct record_format' declared inside parameter list sek.h:3: warning: its scope is only this definition or declaration, which is probably not what you want sek.c:5: warning: 'struct record_format' declared inside parameter list sek.c:5: error: parameter 1 ('rec') has incomplete type
Was mache ich falsch? Leider haben meine Bücher zu dem Thema nix zu sagen und bei Google finde ich auch nix.
Schon mal Danke und so
Magier-Phil
-
Dann pack doch deine Struktur auch in das .h File
-
Karlchen1234 schrieb:
Dann pack doch deine Struktur auch in das .h File
Ähm sorry aber könntest du das präzisieren? Bekomme das einfach nicht hin!!!
-
Also ich habe wirklich alles ausprobiert.
Habe das Struct in die sek.h eingetragen und die Definition von "rec" in Main gehollt. Alles gut und schön, jetzt mault GCC
main.c: In function 'main': main.c:22: error: incompatible type for argument 1 of 'display'
das ist es also auch nicht!
Könnte mir jemand erklären wie ich eine Struktur in ein anderes Modul übergebe oder kennt jemand eine Beispiel dazu im Netz? Bin echt verzweifelt......
-
Also du kannst auf ein struct nur zugreifen, wenn du es irgendwo vorher definiert hast. Im Sinne von Modularität tut man dies am besten in den Header-Dateien, wenn mehrere Source Dateien mit dem struct arbeiten sollen. Alle Source Dateien müssen dann diese Header Datei per #include einbinden.
Also so gehts:
#ifndef __HEADER_H__ #define __HEADER_H__ //============================================================================ // INTERFACE DEFINITIONS / ENUMERATIONS / SIMPLE TYPEDEFS //============================================================================ struct record_format { char name[20]; int age; }; #endif // __HEADER_H__
In deinem Main Source File und allen anderen Source Dateien fügst du nun #include "header.h" ein und voila alle kennen dein Struct!
-
Jo Danke! Jetzt funzt es perfekt!!!
Also für alle DAU's wie mich die Beispielerklärung:
Ihr wollte eine Struct in mehreren Modulen nutzen.....
Datei : Struct.h
/*Struct.h*/ struct Datas{ char Server[255]; char User[255]; char Passwort[255]; char Datenbank[255]; char Pfad[1000]; }; extern struct Datas ST_datas;
Datei : Struct.c
#include "Struct.h" struct Datas ST_datas;
...jetzt könnt ihr "ST_datas" benutzen...
bindet "Struct.h" ein und los gehts!#include <stdio.h> #include <string.h> #include "Struct.h" int main(void) {/*Int Main*/ strcpy(ST_datas.Server,"Hallo"); printf("%s\n",ST_datas.Server); }/*Int Main*/
Bedankt an alle, die geholfen haben.....