Как я увеличиваю перечисление в VS C++ 6.0?

Я копирую и вставил некоторый код, который увеличивает перечисление:

myenum++;  

Этот код хорошо работал, поскольку он был скомпилирован в VS.NET C++ 2003

Я теперь разрабатываю в VS 6.0 и получаю ошибку:

ошибка C2676: двоичный файл '++': 'перечислимый идентификатор' не определяет этот оператор или преобразование в тип, приемлемый для предопределенного оператора

Как я могу заставить это вести себя то же в 6,0?

5
задан T.T.T. 23 June 2010 в 23:25
поделиться

3 ответа

Пожалуйста, попробуйте преобразовать в int, добавить единицу (+1) и преобразовать обратно в enum.

2
ответ дан 18 December 2019 в 07:53
поделиться

Я не вижу ничего плохого в определении оператора++ на хорошо понятном перечислении. Разве не в этом цель перегрузки операторов? Если контекст не имеет смысла (например, перечисление с дырами в нем), то, конечно, это не имеет смысла. Определение operator* для класса под названием Complex, реализующего комплексные числа, - это не просто правильное, а отличное применение перегрузки математических операторов в C++!

Если разработчик определяет перечисление, где operator++ имеет очевидный и интуитивный смысл для клиентов этого перечисления, то это хорошее применение перегрузки оператора.

enum DayOfWeek {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday};
inline DayOfWeek operator++(DayOfWeek &eDOW, int)
{
   const DayOfWeek ePrev = eDOW;
   const int i = static_cast<int>(eDOW);
   eDOW = static_cast<DayOfWeek>((i + 1) % 7);
   return ePrev;
}
13
ответ дан 18 December 2019 в 07:53
поделиться

перечисление может быть интегральным, но не Это не значит, что он охватывает непрерывный диапазон.

Это

enum {
  A, 
  B,
  C,
}

май По умолчанию будет

enum {
  A = 0, 
  B = A + 1,
  C = B + 1,
}

, поэтому вы можете избежать наказания с помощью

int a = A;
a++;

. Однако, если у вас есть

enum {
  A = 2, 
  B = 4,
  C = 8,
}

, +1 не сработает.

Итак, если бы у вас также были такие вещи, как

enum {
  FIRST,
  A = FIRST, 
  B,
  C,
  LAST = C
}

, тогда при повторении перечисления вы бы дважды выполняли A и C?

Какова цель повторения перечисления? вы хотите сделать «для всех» или для некоторого подмножества, есть ли на самом деле порядок в перечислении?

Я бы бросил их все в контейнер и повторил бы его вместо

  • неупорядоченный - используйте набор
  • упорядоченный - вектор или список
4
ответ дан 18 December 2019 в 07:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: