Проблема в том, что перечисления могут неявно преобразовываться в int
, но int
не может неявно преобразовываться в типы перечислений.
Когда вы добавляете 2 в перечисление, результатом будет int
или unsigned int
(или, возможно, какой-то другой целочисленный тип, если перечисление содержит действительно большие значения), который не может быть назначен обратно перечисление без приведения. Чтобы сохранить это ограничение, в перечислениях также нет оператора +=
.
Вы можете объявить bolum
как int, а не как тип enum, или вы можете написать что-то вроде:
bolum = static_cast<bolumler>(bolum+2);
Но будьте осторожны, это немного рискованно. bolum+2
все еще находится в допустимом диапазоне перечислимого типа bolumler
, и на самом деле так же buro+2
по техническим причинам, чтобы точно определить диапазон перечисления. Но в целом вы не можете просто добавить 2 к значению перечисления и ожидать, что оно обязательно будет в диапазоне перечисления. Единственная цель использования перечислимого типа вместо int состоит в том, чтобы получить дополнительную безопасность типов: если вы этого не хотите, просто определите набор целочисленных констант для нужных вам значений.