Значения перечисления существуют в том же пространстве имен, что и перечисление. То есть, что касается LAST_ENTRY
, он похож (используется очень свободно здесь) на:
enum options_e { /* ... */ );
// for the LAST_ENTRY value in options_e
static const int LAST_ENTRY = /* whatever */;
enum function_mode_e { /* ... */ );
// for the LAST_ENTRY value in function_mode_e
static const int LAST_ENTRY = /* whatever */;
Как видите, вы переопределяете LAST_ENTRY
, отсюда и ошибка. Лучше добавлять префиксы в перечисление к чему-либо, чтобы различать их:
enum options_e
{
options_e_acm = 0,
options_e_anm,
options_e_smd,
options_e_LAST_ENTRY,
options_e_ENTRY_COUNT = options_e_LAST_ENTRY // note this is redundant
};
enum function_mode_e
{
function_mode_e_play = 0,
function_mode_e_record,
function_mode_e_bridge,
function_mode_e_LAST_ENTRY,
function_mode_e_ENTRY_COUNT = function_mode_e_LAST_ENTRY
};
Хотя теперь вы теряете то, что вы собирались раньше. (Не могли бы вы уточнить, что это было?)