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 回答