2012-09-10 98 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;