如何在 Visual Studio C++ 6.0 中递增枚举?

问题描述 投票:0回答:5

我复制并粘贴了一些递增枚举的代码:

myenum++;  

此代码运行良好,因为它是在 VS.NET C++ 2003 中编译的。

我现在在 Visual Studio 6.0 中开发并收到错误:

错误 C2676:二进制 '++':'枚举 ID' 没有定义这个 运算符或类型转换 预定义操作员可接受

如何才能使其在 6.0 中表现相同?

c++ c visual-studio compiler-construction enums
5个回答
13
投票

我认为在一个易于理解的枚举上定义operator++没有什么问题。这不就是运算符重载的目的吗?如果上下文没有意义(例如,其中有漏洞的枚举),那么它当然没有意义。为实现复数的称为 Complex 的类定义运算符*不仅有效,而且是 C++ 中数学运算符重载的一个很好的应用!

如果开发人员定义了一个枚举,其中运算符++对该枚举的客户端具有明显且直观的意义,那么这是该运算符重载的一个很好的应用。

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;
}

4
投票

枚举可能是整数,但这并不意味着它涵盖连续范围。

这个

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 两次吗?

迭代枚举的目的是什么?您希望“为所有人”还是为某些子集执行操作,枚举实际上有顺序吗?

我会把它们全部扔进一个容器中并迭代它

  • 无序 - 使用一组
  • 有序 - 向量或列表

3
投票

请尝试转换为 int,加一 (+1),然后转换回 enum。


1
投票
myenum=(myenum_type)((int)myenum+1);

它很丑,但很管用。


0
投票
enum xyz
{
a,
b,
c};

xyz val = a;

//try this

val = xyz(val +1);
© www.soinside.com 2019 - 2024. All rights reserved.