Страницы

Поиск по вопросам

пятница, 12 октября 2018 г.

В разных enum нельзя применять одинаковые имена

Есть два enum: enum OBJECT_PULSES и enum OBJECT_SENSOR_MODE_RD имена в перечислениях одинаковые RD_CH..., но их числовые значения разные. При компиляции ошибка: redeclaration. Это особенность языка или что не так с настройками компилятора, как это побороть кроме как переименования?
enum OBJECT_PULSES { RD_CH1 = 14, // Счетчик импульсов, канал 1 // ... RD_CH32 = 45 // Счетчик импульсов, канал 32 };
enum OBJECT_SENSOR_MODE_RD { RD_CH1 = 46, // RD. Режим датчика, канал 1 // ... RD_CH32 = 77, // RD. Режим датчика, канал 32 };


Ответ

Константы enum'ов не имеют собственной области видимости, поэтому у приведённых двух енумов всё оказывается в одной области видимости. Естественно, в одной области видимости одинаковые имена недопустимы.
Как вариант, можно использовать enum class, которые создают свой скоуп. Либо использовать более старую идею с обёртыванием enum'а в пространство имён.

Комментариев нет:

Отправить комментарий