C++ typedef enum:从 int 到 enum 的转换无效

发布于 2024-09-25 18:57:57 字数 383 浏览 2 评论 0原文

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

琴流音 2024-10-02 18:57:57

使用static_cast。您需要显式转换。

adjust_mode_ = static_cast<Adjust_mode>(adjust_mode_+1)%7;

use static_cast. You need an explicit conversion.

adjust_mode_ = static_cast<Adjust_mode>(adjust_mode_+1)%7;
永言不败 2024-10-02 18:57:57

是的,您可以定义一个运算符...

Adjust_mode operator+(Adjust_mode lhs, int rhs)
{
    return static_cast<Adjust_mode>(
               (static_cast<int>(lhs) + rhs) % 7);
}

Adjust_mode operator+(int lhs, Adjust_mode rhs)
{
    return static_cast<Adjust_mode>(
               (lhs + static_cast<int>(rhs)) % 7);
}

请注意,您需要同时允许 adjustment_mode_ + 1 和 1 + adjustment_mode_ 工作。如果您只提供一个函数operator+(Adjust_mode, Adjust_mode),那么上面的任一表达式都会将枚举转换为 int 并返回 int 结果。

这是相当黑客的,所以您可能最好使用普通的命名函数来执行操作,而不是使用很容易被意外调用的运算符。

Yes, you can define an operator...

Adjust_mode operator+(Adjust_mode lhs, int rhs)
{
    return static_cast<Adjust_mode>(
               (static_cast<int>(lhs) + rhs) % 7);
}

Adjust_mode operator+(int lhs, Adjust_mode rhs)
{
    return static_cast<Adjust_mode>(
               (lhs + static_cast<int>(rhs)) % 7);
}

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文