Hvordan får jeg tilgang til interne medlemmer av en fagforening?

stemmer
1

Jeg har en forening som er definert slik:

typedef union {
  enum {
    REVISION = 0,
    CURRENT_VERSION = REVISION
  };

  enum FLAGS{
    FLAG_DEFAULT               = 0x00000000,
    FLAG_EOD                   = 0x00000001,
    FLAG_OUTOFORDER            = 0x00000002
  };

  CHAR _filler[32];

  struct INTERNAL_STRUCTURE {
    UINT16 type;
    UINT16 flags;
  };
}CORRHDR

Hvordan får jeg tilgang til medlemmets av INTERNAL_STRUCTURE fra koden min?

Jeg har tenkt at jeg kunne bare gjøre dette:

CORRHDR hdr;
hdr.INTERNAL_STRUCTURE.type = 1;

Jeg tar feil. Jeg kan se enums i unionen, men ingenting annet. Kan noen forklare strukturen (eller nytte) av denne typen til meg?

Publisert på 12/05/2009 klokken 21:43
kilden bruker
På andre språk...                            


4 svar

stemmer
5

Du har erklært typen heter INTERNAL_STRUCTURE, men ikke en faktisk forekomst av den typen. Prøv dette:

typedef union {
  //...
  CHAR _filler[32];
  struct {
    UINT16 type;
    UINT16 flags;
  } INTERNAL_STRUCTURE;
}CORRHDR;

Deretter for å få tilgang til feltet:

CORRHDR ch;
printf("%u\n", ch.INTERNAL_STRUCTURE.type);
Svarte 12/05/2009 kl. 21:47
kilden bruker

stemmer
1

Du må definere et objekt av typen INTERNAL_STRUCTUREfør du kan prøve å få tilgang til det. Din forening som nå ikke har en. Prøve:

struct INTERNAL_STRUCTURE {
    UINT16 type;
    UINT16 flags;
  };
struct INTERNAL_STRUCTURE is;

...

Svarte 12/05/2009 kl. 21:47
kilden bruker

stemmer
0

Også definerer du din struct, men ikke bruk den!

Du må definere en variabel av at struct Type:

union Blob
{
  CHAR _filler[32];

  struct INTERNAL_STRUCTURE {
    UINT16 type;
    UINT16 flags;
  } myStruct;
};

CORRHDR hdr;
hdr.myStruct.type = 1;
Svarte 12/05/2009 kl. 21:50
kilden bruker

stemmer
0

Du definert en type som heter INTERNAL_STUCTURE

ikke en forekomst som heter INTERNAL_STRUCTURE.

typedef union {
  enum {
    REVISION = 0,
    CURRENT_VERSION = REVISION
  };

  enum FLAGS{
    FLAG_DEFAULT               = 0x00000000,
    FLAG_EOD                   = 0x00000001,
    FLAG_OUTOFORDER            = 0x00000002
  };

  CHAR _filler[32];

  struct {
    UINT16 type;
    UINT16 flags;
  } INTERNAL_STRUCTURE;
}CORRHDR;
Svarte 12/05/2009 kl. 21:48
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more