Во-первых, я должен сказать, что код прекрасно компилируется без ошибок за пределами затмения. Столкнулся с этой проблемой, перенося проект в затмение 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, чтобы позволить передавать перечисление в конструктор? или, если нет, есть какие-то другие обходные пути для этой проблемы?
Скажи только это:
class TestThis
{
enum NUMBER { one, two };
TestThis(NUMBER n);
};
Ваш код действительно повторно объявляет другой enum NUMBER
, Это ничем не отличается от, скажем, void (struct Foo x);
что на самом деле декларация из struct Foo
,
Обновить: Несколько объявлений на самом деле хорошо. поговорка enum
или же struct
снова возможно, хотя, вероятно, не очень красиво.
Я отправился сообщать об ошибке в Eclipse CDT bugzilla и обнаружил, что о ней уже сообщил Доминик Айхельберг (см. Ошибку 385144) в июле. Чтение этого дало мне достаточно информации для обхода. Проблема не возникает, если переменная enum не является первым аргументом конструктора. Всем спасибо.