Struct->联盟 - STRUCT

时间:2012-09-10 16:52:31

标签: visual-c++ struct unions

我有这个结构:

struct foo {
   int a;
   union {
      struct {
         int b;
         struct bar
         {
            int c;
            int d;
         } *aBar;
      } in;
   } u;
};

如何在Visual C ++中声明类型为bar的变量?

2 个答案:

答案 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;