2012-09-19 40 views
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

說只是這樣的:

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

你的代碼確實是重新申報另一個enum NUMBER。這與例如void (struct Foo x);,實際上是聲明struct Foo沒有什麼不同。

更新:多個聲明實際上很好。說enumstruct再次是可能的,雖然可能不是很漂亮。

+0

打敗我幾秒鐘。 – Borgleader

+0

其實我的錯誤沒有提到我試過TestThis(NUMBER n); TestThis(TestThis :: NUMBER n); TestThis(enum TestThis :: NUMBER n); TestThis(枚舉NUMBER n);全部導致錯誤。但我可以使用填充(枚舉NUMBER n);或填充(NUMBER n);或填充(TestThis :: NUMBER n);或填充(枚舉TestThis :: NUMBER n); –

+0

,我可以添加更多以「枚舉NUMBER n」作爲成員的函數,但它們不會導致此問題。即test1(枚舉NUMBER n); test2(枚舉NUMBER n);沒有問題 - 它只是構造函數,就像我在eclipse中所說的那樣,「enum 」函數參數構造是有效的C++。它的CDT關閉了,我認爲自從我說過,代碼可以很好地從命令行編譯。 –

1

我去報告eclipse CDT bugzilla中的bug,發現它已於7月份由Dominik Eichelberg報告(參見Bug 385144)。閱讀它給了我足夠的信息來解決問題。如果枚舉變量不是構造函數的第一個參數,則不會發生該問題。謝謝大家。

相關問題