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没有什么不同。

更新:多个声明实际上很好。说enumstruct再说一遍是可能的,虽然可能不是很漂亮。

于 2012-09-19T15:40:05.873 回答
1

我在 eclipse CDT bugzilla 上报告了这个 bug,发现 Dominik Eichelberg 已经在 7 月份报告了这个 bug(参见 Bug 385144)。阅读它给了我足够的信息来解决问题。如果枚举变量不是构造函数的第一个参数,则不会出现此问题。谢谢大家。

于 2012-09-20T03:31:18.603 回答