Недопустимая ошибка переопределения при передаче переменной перечисления члена в конструктор класса

Во-первых, я должен сказать, что код прекрасно компилируется без ошибок за пределами затмения. Столкнулся с этой проблемой, перенося проект в затмение 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, чтобы позволить передавать перечисление в конструктор? или, если нет, есть какие-то другие обходные пути для этой проблемы?

3

Решение

Скажи только это:

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

Ваш код действительно повторно объявляет другой enum NUMBER, Это ничем не отличается от, скажем, void (struct Foo x);что на самом деле декларация из struct Foo,

Обновить: Несколько объявлений на самом деле хорошо. поговорка enum или же struct снова возможно, хотя, вероятно, не очень красиво.

4

Другие решения

Я отправился сообщать об ошибке в Eclipse CDT bugzilla и обнаружил, что о ней уже сообщил Доминик Айхельберг (см. Ошибку 385144) в июле. Чтение этого дало мне достаточно информации для обхода. Проблема не возникает, если переменная enum не является первым аргументом конструктора. Всем спасибо.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector