gcc 4.1.2 c99
我在这个文件ccsmd.h中有以下枚举:
enum options_e
{
acm = 0,
anm,
smd,
LAST_ENTRY,
ENTRY_COUNT = LAST_ENTRY
};
enum function_mode_e
{
play = 0,
record,
bridge,
LAST_ENTRY,
ENTRY_COUNT = LAST_ENTRY
};
错误讯息:
error: redeclaration of enumerator ‘LAST_ENTRY’
error: previous definition of ‘LAST_ENTRY’ was here
error: redeclaration of enumerator ‘ENTRY_COUNT’
error: previous definition of ‘ENTRY_COUNT’ was here
我有LAST_ENTRY
,因此我可以将其用作数组的索引。所以我喜欢在所有枚举中保持相同。
答案 0 :(得分:5)
枚举值存在于与定义枚举相同的命名空间中。也就是说,关于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
};
虽然现在你失去了以前想要的任何东西。 (你能澄清那是什么吗?)