Есть два 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'а в пространство имён.
Комментариев нет:
Отправить комментарий