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.....


Anmelden zum Antworten