Невозможно объявить "div" в перечислении
Я хочу объявить перечисление с основными математическими операциями следующим образом:
enum Operations
{
div,
mul,
add,
sub
};
но компилятор жалуется на это объявление, поскольку div является зарезервированным ключевым словом в С++. Как я могу переопределить его? или есть какое-то решение?
Вот сообщение об ошибке:
error: 'div redeclared как другой вид символа /usr/include/stdlib.h:158: error: предыдущее объявление 'div_t div (int, int)
Ответы
Ответ 1
div
не является ключевым словом, а является стандартной библиотечной функцией, объявленной в stdlib.h
и, возможно, в cstdlib
.
Самое простое решение - использовать разные идентификаторы. В противном случае вы можете использовать перечисление с областью:
enum class Operations
{
div,
mul,
add,
sub
};
Это приведет к значениям перечисления в области Operations
(Operations::div
, Operations::mul
и т.д.)
Ответ 2
Потому что div
- это функция, объявленная в cstdlib
, а имя нумерованного перечисления может быть опущено в глобальное. Это означает, что не может использовать div
как перечисление.
в С++ 11, для этой ситуации вводится нумерованное перечисление
enum class Operations
{
div,
mul,
add,
sub
};
и затем вы можете использовать Operations::div
Ответ 3
Вы можете создать новое пространство имен:
#include <stdlib.h>
namespace a
{
enum Operations
{
div,
mul,
add,
sub
};
}
int main()
{
a::div;
return 0;
}
Ответ 4
Используйте cstdlib
, а не stdlib.h
, на С++. И не импортируйте пространство имен std
в глобальное пространство имен (т.е. Не используйте using namespace std
). Тогда в глобальном пространстве имен не будет div
, чтобы столкнуться с вашим enum
.