重新调整普查员

时间:2010-04-08 07:33:09

标签: c

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,因此我可以将其用作数组的索引。所以我喜欢在所有枚举中保持相同。

1 个答案:

答案 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
};

虽然现在你失去了以前想要的任何东西。 (你能澄清那是什么吗?)