我有这个结构:
struct foo {
int a;
union {
struct {
int b;
struct bar
{
int c;
int d;
} *aBar;
} in;
} u;
};
如何在Visual C ++中声明类型为bar的变量?
答案 0 :(得分:1)
当您声明这样的结构时:
struct
{
int b;
} in;
您实际上是在创建名为in
的对象,具有未命名数据类型。此数据类型将由编译器在内部命名,并依赖于编译器。上面给出的样式不会将in
声明为类型,而是变量!
如果要将其设为类型,请使用以下任一方法:
// Approach 1
struct in{...};
// Approach 2
typedef struct {..} in; // in is now a type, because of `typedef`
如果您的编译器支持C ++ 0x,并且特别是键入decltype
关键字,则可以将其用于第一种样式(使in
成为变量)。例如:
decltype(in) in_var;
in_var.b = 10;
答案 1 :(得分:0)
感谢Ajay,我解决了这个问题:
foo *k;
decltype(k->u.in.aBar) j;
j->c = 1;
j->d = 1;