我有一个像这样定义的联盟:
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;
我错了。我可以看到联盟中的枚举,但没有别的。有人可以向我解释这种类型的结构(或好处)吗?
答案 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;