Probleme mit Zugriff auf struct



  • Hallo,

    wie kann ich bei dieser struct auf die einzelnen element zugreifen?

    struct _Msg {
      unsigned short ErrNbr; 
      unsigned char *Str; 
    
    }; 
    
    struct _MsgLanguage {
    
       const struct _Msg test; 
    }; 
    
    const struct _MsgLanguage ErrMsg[] = 
    {
      {1, "teststring"}, 
      {2, "teststring2"}
    };
    
    /* hier gibt es leider fehlermeldungen: */
    unsigned short nbr =  ErrMsg[0].test.ErrNbr; 
    
    unsigned char *ptr =  &ErrMsg[0].test.Str;
    

    Gruß
    Hans-Jörg



  • welche Fehlermeldungen ?

    zumindest mit MSVC (vs2005e) scheint es zu funktionieren
    wenn denn das '&' entfernt wird

    unsigned char *ptr = ErrMsg[0].test.Str;



  • struct _Msg {
      unsigned short ErrNbr;
      const char *Str;
    
    };
    
    struct _MsgLanguage {
    
       const struct _Msg test;
    };
    
    const struct _MsgLanguage ErrMsg[] =
    {
      {1, "teststring"},
      {2, "teststring2"}
    };
    
    unsigned short nbr =  ErrMsg[0].test.ErrNbr;
    
    const char *ptr =  ErrMsg[0].test.Str;
    


  • RED-BARON schrieb:

    welche Fehlermeldungen ?

    zumindest mit MSVC (vs2005e) scheint es zu funktionieren
    wenn denn das '&' entfernt wird

    unsigned char *ptr = ErrMsg[0].test.Str;

    Hallo,

    die Fehlermeldung lautet: "expression must be a pointer to a complete object type".

    Vielleicht macht die Tatsache einen Unterschied, dass die Struct komplett in einem c-file definiert wird und als extern im dazugehörigen headerfile definiert ist, so dass ich auch von anderen c-files darauf zugreifen kann. Das mach ich bzw. versuch ich gerade, aber mit der obigen Fehlermeldung.

    Gruß
    Hans-Jörg



  • Hans-Jörg schrieb:

    RED-BARON schrieb:

    welche Fehlermeldungen ?

    zumindest mit MSVC (vs2005e) scheint es zu funktionieren
    wenn denn das '&' entfernt wird

    unsigned char *ptr = ErrMsg[0].test.Str;

    Hallo,

    die Fehlermeldung lautet: "expression must be a pointer to a complete object type".

    Vielleicht macht die Tatsache einen Unterschied, dass die Struct komplett in einem c-file definiert wird und als extern im dazugehörigen headerfile definiert ist, so dass ich auch von anderen c-files darauf zugreifen kann. Das mach ich bzw. versuch ich gerade, aber mit der obigen Fehlermeldung.

    Gruß
    Hans-Jörg

    im Headerfile steht:

    extern const struct _MsgLanguage ErrMsg[];
    


  • im gleichen c-file in dem auch die structs definiert sind, funktioniert der zugriff. Also mach ich anscheinend irgendwas mit dem extern () falsch.

    Gruß
    Hans-Jörg



  • Die Typ-Definitionen der structs '_Msg' und '_MsgLanguage' müssen beide im Header-File abgelegt sein.


Anmelden zum Antworten