3

まず、Eclipse 以外では、コードはエラーなしで正常にコンパイルされると言わなければなりません。プロジェクトをEclipse Juno、CDT 8.1、gccバージョン4.6.3に移動すると、この問題が発生しました

//This example code works:

 1. class TestThis {
 2.  public:
 3.     enum NUMBER { one, two };
 4.     TestThis();
 5.     int populate(enum NUMBER n);
 6. };

//This generates an error "invalid redefinition of 'NUMBER'" at line 3 before compile:

 1. class TestThis {
 2. public:
 3.     enum NUMBER { one, two };
 4.     TestThis(enum NUMBER n);
 5.     int populate();
 6. };

質問: CDT を "修正" して列挙型をコンストラクターに渡す方法はありますか? そうでない場合、この問題に対する他の回避策はありますか?

4

2 に答える 2

4

これだけ言ってください:

class TestThis
{
    enum NUMBER { one, two };
    TestThis(NUMBER n);
};

あなたのコードは確かに別 のを再宣言してenum NUMBERいます。これは、void (struct Foo x);実際には の宣言である と同じですstruct Foo

更新:複数の宣言は実際には問題ありません。おそらくあまりきれいではありませんが、enumまたはもう一度言うことは可能です。struct

于 2012-09-19T15:40:05.873 に答える
1

eclipse CDT bugzilla でバグを報告しに行ったところ、7 月に Dominik Eichelberg によって既に報告されていることがわかりました (Bug 385144 を参照)。それを読むことで、回避するのに十分な情報が得られました。enum 変数がコンストラクターの最初の引数でない場合、この問題は発生しません。みんなありがとう。

于 2012-09-20T03:31:18.603 に答える