C++ typedef enum:从 int 到 enum 的转换无效
typedef enum{
Adjust_mode_None = 0,
Adjust_mode_H_min,
Adjust_mode_H_max,
Adjust_mode_S_min,
Adjust_mode_S_max,
Adjust_mode_V_min,
Adjust_mode_V_max
}Adjust_mode;
在某些时候我想做:
adjust_mode_ = (adjust_mode_+1)%7;
但我得到
从int到Adjust_mode的转换无效
这在其他语言中是可以的,在C++中有什么问题?我需要定义一些运算符吗?
typedef enum{
Adjust_mode_None = 0,
Adjust_mode_H_min,
Adjust_mode_H_max,
Adjust_mode_S_min,
Adjust_mode_S_max,
Adjust_mode_V_min,
Adjust_mode_V_max
}Adjust_mode;
and at some point I want to do:
adjust_mode_ = (adjust_mode_+1)%7;
but I get
Invalid conversion from int to Adjust_mode
This is ok in other languages, what is wrong in C++? Do I need to define some operator?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用
static_cast
。您需要显式转换。use
static_cast
. You need an explicit conversion.是的,您可以定义一个运算符...
请注意,您需要同时允许 adjustment_mode_ + 1 和 1 + adjustment_mode_ 工作。如果您只提供一个函数
operator+(Adjust_mode, Adjust_mode)
,那么上面的任一表达式都会将枚举转换为 int 并返回 int 结果。这是相当黑客的,所以您可能最好使用普通的命名函数来执行操作,而不是使用很容易被意外调用的运算符。
Yes, you can define an operator...
Note that you need both to allow adjust_mode_ + 1 and 1 + adjust_mode_ to work. If you only provide a single function
operator+(Adjust_mode, Adjust_mode)
then either expression above would instead convert the enum to an int and return an int result.This is pretty hackish, so you may be best off using a normal named function to perform the operation, rather than using an operator that can be too easily called by accident.