代码之家  ›  专栏  ›  技术社区  ›  nacho4d

typedef枚举

  •  3
  • nacho4d  · 技术社区  · 14 年前
    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的转换是无效的

    这在其他语言中是正确的,C++中有什么错误?我需要定义一些运算符吗?

    2 回复  |  直到 14 年前
        1
  •  4
  •   Tony Delroy    14 年前

    是的,您可以定义运算符。。。

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

    operator+(Adjust_mode, Adjust_mode) 然后,上面的任一表达式都会将枚举转换为int并返回int结果。

        2
  •  5
  •   aJ.    14 年前

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

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