2013-07-14 32 views
0

我有一些C代碼和使用GCC編譯器。匿名聯盟只能有非靜態數據成員GCC C++

的代碼有一些嵌套類型的匿名聯合中:

struct ab { 
    int a; 
    int b; 
    union { 
     int *c; 
     int *d; 
     struct f { 
      int *c; 
      int *d; 
     }; 
     struct e { 
      int *c; 
      int *d; 
     }; 
    }; 
}; 

我收到此錯誤:

Error: 'struct ab::<anonymous union>::f' invalid; an anonymous union 
can only have non-static data members. 

有人可以給爲什麼這個錯誤是發生進一步的解釋?

+0

您收到錯誤,因爲這沒有任何意義。從你的問題中不清楚你期望做什麼,但如果你補充說明,有人可以回答你如何實現這一點。 – hvd

+3

§9.5/5 - *匿名聯合的成員規範 只能定義非靜態數據成員。 [注意:嵌套類型和函數不能在匿名聯合中聲明 。 - 結束說明] * – chris

+0

問題不明確,確切無誤。 –

回答

4

那麼,你不能在匿名聯合中聲明嵌套類型。這正是你所做的:你在你的匿名聯盟中聲明瞭類fe。這是編譯器不喜歡的。它告訴你,你可以在匿名聯合中做的事情是聲明非靜態數據成員。你不能在那裏聲明嵌套類型。

目前還不清楚你想要在這裏做什麼,所以很難提供任何進一步的建議。

4

刪除您定義的工會內部結構。

struct ab { 
    int a; 
    int b; 
    union { 
     int *c; 
     int *d; 
     struct { 
      int *c; 
      int *d; 
     }; 
     struct { 
      int *c; 
      int *d; 
     }; 
    }; 
}; 
相關問題