1

次のように定義された共用体があります。

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

コードから INTERNAL_STRUCTURE のメンバーにアクセスするにはどうすればよいですか?

私はこれを行うことができると思っていました:

CORRHDR hdr;
hdr.INTERNAL_STRUCTURE.type = 1;

私が間違っている。ユニオンで列挙型を確認できますが、他には何もありません。誰かがこのタイプの構造 (または利点) を説明してくれませんか?

4

4 に答える 4

6

というを宣言しましたINTERNAL_STRUCTUREが、その型の実際のインスタンスではありません。これを試して:

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

次に、フィールドにアクセスします。

CORRHDR ch;
printf("%u\n", ch.INTERNAL_STRUCTURE.type);
于 2009-05-12T21:47:24.903 に答える
1

INTERNAL_STRUCTUREアクセスを試みる前に、タイプのオブジェクトを定義する必要があります。現在、あなたの組合には組合がありません。試す:

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

...

于 2009-05-12T21:47:44.403 に答える
0

INTERNAL_STUCTURE という名前の型を定義しました

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;
于 2009-05-12T21:48:46.320 に答える
0

また、構造体を定義しますが、使用しないでください!

その構造体型の変数を定義する必要があります。

union Blob
{
  CHAR _filler[32];

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

CORRHDR hdr;
hdr.myStruct.type = 1;
于 2009-05-12T21:50:29.453 に答える