我想用基本的数学运算声明一个枚举如下:
enum Operations
{
div,
mul,
add,
sub
};
但是编译器抱怨这个声明,因为div是C ++中的保留关键字。我怎样才能覆盖它?还是有任何解决方案?
以下是错误消息:
错误:'div'重新声明为不同类型的符号 /usr/include/stdlib.h:158:错误:先前声明'div_t div(int,int)'
答案 0 :(得分:22)
div
不是关键字,而是标准库函数,在stdlib.h
中声明,可能在cstdlib
中声明。
最简单的解决方案是使用不同的标识符。否则,您可以使用范围枚举:
enum class Operations
{
div,
mul,
add,
sub
};
这会将枚举值放在Operations
范围内(Operations::div
,Operations::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
发生冲突。