2012-09-10 69 views
0

我有这样的结构:Struct->联盟结构

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

我如何需要声明式酒吧的变量,在Visual C++?

+0

为什么有工会吗?或者你打算以后再扩展它? – Pyrce

+0

它的第三方代码,我不这样做 – EsteveBlanch

回答

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; 
0

由于阿贾伊,我解决了这个办法:

foo *k; 
decltype(k->u.in.aBar) j; 
j->c = 1; 
j->d = 1;