0

我有这个结构:

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

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

4

2 回答 2

1

当您声明这样的结构时:

struct 
{ 
    int b;  
} in;

您实际上是在创建一个具有 name 的对象in,具有未命名的数据类型。此数据类型将由编译器在内部命名,并取决于编译器。上面给出的样式没有声明in为类型,而是变量!

如果您想使其成为一种类型,请使用任一给定方法:

// Approach 1
struct in{...};

// Approach 2
typedef struct {..} in; // in is now a type, because of `typedef`

如果您有支持 C++0x 的编译器,并且特别是 typedecltype关键字,您可以将它用于第一种样式(它in生成一个变量)。例子:

decltype(in) in_var;
in_var.b = 10;
于 2012-09-10T17:20:51.470 回答
0

谢谢Ajay,我这样解决了:

foo *k;
decltype(k->u.in.aBar) j;
j->c = 1;
j->d = 1;
于 2012-09-10T19:30:29.987 回答