如何在VS C++ 6.0中增加枚举?

irtuqstp  于 2023-10-16  发布在  其他
关注(0)|答案(5)|浏览(91)

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

myenum++;

这段代码在VS.NET C++ 2003中编译时运行良好
我现在在VS 6.0中开发,得到了错误:
错误C2676:二进制'++':“enum ID”未定义此运算符或到预定义运算符可接受的类型的转换
我怎样才能让它在6.0中表现得一样?

ulydmbyx

ulydmbyx1#

我认为在一个很好理解的枚举上定义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;
}
w80xi6nr

w80xi6nr2#

枚举可以是整数,但并不意味着它覆盖了连续的范围。

enum {
  A, 
  B,
  C,
}

5月将默认为

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两次吗?
迭代枚举的目的是什么?你想做的是“为所有”还是为一些子集,实际上有一个顺序的枚举?
我会把它们都扔到一个容器里,

  • 无序-使用集合
  • 有序-向量或列表
yks3o0rb

yks3o0rb3#

请尝试转换为int,加一(+1)并转换回枚举。

5gfr0r5j

5gfr0r5j4#

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

它很丑,但它工作。

dw1jzc5e

dw1jzc5e5#

enum xyz
{
a,
b,
c};

xyz val = a;

//try this

val = xyz(val +1);

相关问题