Невозможно объявить "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.