我复制并粘贴了一些递增枚举的代码:
myenum++;
此代码运行良好,因为它是在 VS.NET C++ 2003 中编译的。
我现在在 Visual Studio 6.0 中开发并收到错误:
错误 C2676:二进制 '++':'枚举 ID' 没有定义这个 运算符或类型转换 预定义操作员可接受
如何才能使其在 6.0 中表现相同?
我认为在一个易于理解的枚举上定义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;
}
枚举可能是整数,但这并不意味着它涵盖连续范围。
这个
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 两次吗?
迭代枚举的目的是什么?您希望“为所有人”还是为某些子集执行操作,枚举实际上有顺序吗?
我会把它们全部扔进一个容器中并迭代它
请尝试转换为 int,加一 (+1),然后转换回 enum。
myenum=(myenum_type)((int)myenum+1);
它很丑,但很管用。
enum xyz
{
a,
b,
c};
xyz val = a;
//try this
val = xyz(val +1);