无法在枚举中声明“div”

时间:2014-06-14 14:54:37

标签: c++ enums namespaces scope

我想用基本的数学运算声明一个枚举如下:

enum Operations 
{
    div,
    mul,
    add,
    sub
};

但是编译器抱怨这个声明,因为div是C ++中的保留关键字。我怎样才能覆盖它?还是有任何解决方案?

以下是错误消息:

  

错误:'div'重新声明为不同类型的符号   /usr/include/stdlib.h:158:错误:先前声明'div_t div(int,int)'

4 个答案:

答案 0 :(得分:22)

div不是关键字,而是标准库函数,在stdlib.h中声明,可能在cstdlib中声明。

最简单的解决方案是使用不同的标识符。否则,您可以使用范围枚举:

enum class Operations 
{
    div,
    mul,
    add,
    sub
};

这会将枚举值放在Operations范围内(Operations::divOperations::mul等。)

答案 1 :(得分:6)

因为div是在cstdlib中声明的函数,并且未映射的枚举的名称可以省略为全局。这意味着您无法使用div作为枚举。

在C ++ 11中,为这种情况引入了范围枚举

enum class Operations 
{
    div,
    mul,
    add,
    sub
};

然后您可以使用Operations::div

答案 2 :(得分:2)

您可以创建新的命名空间:

#include <stdlib.h>

namespace a
{
    enum Operations
    {
        div,
        mul,
        add,
        sub
    };
}

int main()
{
    a::div;
    return 0;
}

答案 3 :(得分:0)

在C ++中使用cstdlib,而不是stdlib.h。并且不要将std命名空间导入全局命名空间(即,不要使用using namespace std)。然后,全局命名空间中不会有div与您的enum发生冲突。