首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >枚举器的重新声明

枚举器的重新声明
EN

Stack Overflow用户
提问于 2010-04-08 15:33:09
回答 1查看 13.2K关注 0票数 2

gcc 4.1.2 c99

我在这个ccsmd.h文件中有以下枚举:

代码语言:javascript
复制
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
};

错误消息:

代码语言:javascript
复制
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,所以我可以用它作为数组的索引。所以我喜欢在所有枚举中保持相同。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-04-08 15:40:19

枚举值与定义的枚举存在于同一命名空间中。也就是说,就LAST_ENTRY而言,它类似于(在这里用得很宽松):

代码语言:javascript
复制
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,因此出现了错误。最好在枚举值前面加上一些东西来区分它们:

代码语言:javascript
复制
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
};

尽管现在你失去了你以前想要的东西。(你能澄清一下那是什么吗?)

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2598240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档