如何访问工会的内部成员?

时间:2009-05-12 21:43:57

标签: c++ struct unions

我有一个像这样定义的联盟:

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 个答案:

答案 0 :(得分:5)

您已声明名为INTERNAL_STRUCTURE类型,但不是该类型的实际实例。试试这个:

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

然后访问该字段:

CORRHDR ch;
printf("%u\n", ch.INTERNAL_STRUCTURE.type);

答案 1 :(得分:1)

您需要先定义INTERNAL_STRUCTURE类型的对象,然后才能尝试访问它。你现在的工会没有。尝试:

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

...

答案 2 :(得分: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;

答案 3 :(得分:0)

另外,您定义了结构但不使用它!

您需要定义该结构类型的变量:

union Blob
{
  CHAR _filler[32];

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

CORRHDR hdr;
hdr.myStruct.type = 1;