0

スパース 0.4.1 に依存するプロジェクトをコンパイルしようとしていますが、スパース 0.4.1 をコンパイルしようとすると、次のコンパイラ エラーが発生します。

included from parse.c:25:
./parse.h:63:22: error: member of anonymous struct redeclares 'label_statement'
                        struct statement *label_statement;
                                          ^
./parse.h:40:22: note: previous declaration is here
                        struct statement *label_statement;

これらは 2 つの異なる構造体の異なるメンバーであるため、これは私を混乱させます。

コードは次のようになります。

struct statement {
    enum statement_type type;
    struct position pos;
    union {
            struct /* declaration */ {
                    struct symbol_list *declaration;
            };
            struct /* label_arg */ {
                    struct symbol *label;
                    struct statement *label_statement;
            };
            struct {
                    struct expression *expression;
                    struct expression *context;
            };
            struct /* return_statement */ {
                    struct expression *ret_value;
                    struct symbol *ret_target;
            };
            struct /* if_statement */ {
                    struct expression *if_conditional;
                    struct statement *if_true;
                    struct statement *if_false;
            };
            struct /* compound_struct */ {
                    struct statement_list *stmts;
                    struct symbol *ret;
                    struct symbol *inline_fn;
                    struct statement *args;
            };
            struct /* labeled_struct */ {
                    struct symbol *label_identifier;
                    struct statement *label_statement;
            };
.......
4

1 に答える 1

2

ステートメント label_statement を同じ union で 2 回宣言します。1 回目は 40 行目、2 回目は 63 行目です。

     struct statement *label_statement;

2 番目の名前を編集してみてください。

于 2012-11-21T00:30:59.663 に答える