0

C コードがいくつかあり、GCC コンパイラを使用しています。

コードには、無名共用体内にネストされた型がいくつかあります。

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.

このエラーが発生する理由を誰かがさらに説明できますか?

4

3 に答える 3

5

そうですね、無名共用体内でネストされた型を宣言することは許可されていません。そして、それはまさにあなたがしたことです: クラスを宣言しfe匿名共用体の内部で。これは、コンパイラが気に入らないことです。匿名ユニオン内でできることは、非静的データ メンバーを宣言することだけです。そこでネストされた型を宣言することはできません。

あなたがここで何をしようとしているのかはっきりしないので、これ以上の提案をするのは難しい.

于 2013-07-14T07:24:58.010 に答える
4

ユニオン内の構造体の定義を削除します。

struct ab {
    int a;
    int b;
    union {
        int *c;
        int *d;
        struct  {
           int *c;
           int *d;
        };
        struct {
            int *c;
            int *d;
        };
    };
};
于 2014-02-15T06:41:51.793 に答える
0

共用体メンバーを参照すると、構造体メンバーのように機能します。コンパイラにとってあいまいな状況が作成されました。

GCC 仕様の詳細については、http: //gcc.gnu.org/onlinedocs/gcc/Unnamed-Fields.html#Unnamed-Fieldsをご覧ください。

匿名の構造体/共用体を使用して C コードをコンパイルするには?

于 2013-07-14T07:37:36.197 に答える