2010-10-05 88 views
3
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; 

,並在某些時候,我想做的事:的typedef枚舉

adjust_mode_ = (adjust_mode_+1)%7; 

,但我得到從int轉換無效於Adjust_mode

這是在其他語言好的,什麼是錯在C++?我需要定義一些運算符嗎?

回答

4

是的,你可以定義一個操作...

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

請注意,您需要同時允許adjust_mode_ + 1和1 + adjust_mode_工作。如果你只提供一個函數operator+(Adjust_mode, Adjust_mode)那麼上面的表達式將會把enum轉換爲一個int並返回一個int結果。

這是非常黑客的,所以你最好使用一個正常的命名函數來執行操作,而不是使用一個操作符,因爲這個操作符太容易被意外調用。

5

使用static_cast。你需要一個明確的轉換。

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

謝謝,它的工作! adjust_mode_ = static_cast ((adjust_mode_ + 1)%7); – nacho4d 2010-10-05 07:37:34