Код: Выделить всё
void Print_color(int color);
enum Web_color { red = 0xFF0000, green = 0x00FF00, blue = 0x0000FF };
enum Product_info { red = 0, purple = 1, blue = 2 };
Web_color webby = Web_color::blue;
// Clearly at least one of these calls is buggy.
Print_color(webby);
Print_color(Product_info::blue);
Это также связано с соответствующей записью в Руководстве по кодированию AUTOSAR C++, где Правило A7-2-3 гласит: «Перечисления должны быть объявлены как классы перечислений с ограниченной областью действия». с обоснованием:
Если перечисление без области действия объявлено в глобальной области, то его значения могут
переобъявлять константы, объявленные с тем же идентификатором в глобальной области. Это может
привести в замешательство разработчика.
Использование enum-класса в качестве перечисления заключает его перечислители во внутреннюю область и
предотвращает повторное объявление идентификаторов из внешней области.
Обратите внимание, что перечислители класса enum запрещают неявное преобразование в числовые значения.
Первый оператор сложно разобрать (что то же самое). идентификатор?), но там упоминается «переобъявление», так в чем здесь основная проблема (может ли это быть связано с переменной Redeclare внутри перечисления, но первая строка должна быть «Если перечисление без области видимости объявлено в классе глобальной области»)
Подробнее здесь: https://stackoverflow.com/questions/798 ... redeclared
Мобильная версия