无法在枚举中声明"div"

Can't declare "div" in enum

本文关键字:声明 div 枚举      更新时间:2023-10-16

我想声明一个具有基本数学运算的enum,如下所示:

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

,但是编译器抱怨这个声明,因为div在c++中是一个保留关键字。我怎样才能重写它?或者有解决办法吗?

错误信息如下:

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

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

最简单的解决方案是使用不同的标识符。否则,可以使用限定范围的枚举:
enum class Operations 
{
    div,
    mul,
    add,
    sub
};

这将把枚举的值置于Operations范围(Operations::div, Operations::mul等)

因为div是在cstdlib中声明的函数,并且可以省略未作用域枚举的名称为global。这意味着不能使用div作为枚举。

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

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

,然后可以使用Operations::div

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

#include <stdlib.h>
namespace a
{
    enum Operations
    {
        div,
        mul,
        add,
        sub
    };
}
int main()
{
    a::div;
    return 0;
}

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