typedef enum - PullRequest
       8

typedef enum

3 голосов
/ 05 октября 2010
typedef enum{
 Adjust_mode_None = 0,
 Adjust_mode_H_min,
 Adjust_mode_H_max,
 Adjust_mode_S_min,
 Adjust_mode_S_max,
 Adjust_mode_V_min,
 Adjust_mode_V_max
}Adjust_mode;

и в какой-то момент я хочу сделать:

adjust_mode_ = (adjust_mode_+1)%7; 

но я получаю Неверное преобразование из int в Adjust_mode

Это нормально на других языках, что не так вC ++?мне нужно определить некоторый оператор?

Ответы [ 2 ]

5 голосов
/ 05 октября 2010

используйте static_cast.Вам нужно явное преобразование.

adjust_mode_ = static_cast<Adjust_mode>(adjust_mode_+1)%7;
4 голосов
/ 05 октября 2010

Да, вы можете определить оператор ...

Adjust_mode operator+(Adjust_mode lhs, int rhs)
{
    return static_cast<Adjust_mode>(
               (static_cast<int>(lhs) + rhs) % 7);
}

Adjust_mode operator+(int lhs, Adjust_mode rhs)
{
    return static_cast<Adjust_mode>(
               (lhs + static_cast<int>(rhs)) % 7);
}

Обратите внимание, что вам нужно и то, и другое, чтобы Adjust_mode_ + 1 и 1 + Adjust_mode_ работали.Если вы предоставляете только одну функцию operator+(Adjust_mode, Adjust_mode), тогда любое из приведенных выше выражений вместо этого преобразует enum в int и возвращает результат int.

Это довольно хакерский вариант, поэтому лучше использовать обычную именованную функцию.выполнить операцию, а не использовать оператора, которого слишком легко вызвать случайно.

...