2014-03-05 33 views
1

我有下面的函數有枚舉。如果按下按鈕,我想增加數值。當按下按鈕時遞增枚舉值

typedef enum { 
    DATE_TIME, 
    COORDINATE, 
    WINDSPEED, 
    POSITIONTRACK, 
    DISPAY_PARAMETER, 
    SET_PARAMETER, 
    DISPLAY_TYPE_MAX 
}DISPLAY_SCREEN_TYPE; 
DISPLAY_SCREEN_TYPE display_screen_type=DATE_TIME; 

button=check_key(); 
if(button==RIGHT) 
display_screen_type++; 

我正在編譯時出錯。

error: no 'operator++(int)' declared for postfix '++', trying prefix operator instead 
error: no match for 'operator++' in '++display_screen_type' 

這是我的實際代碼語法 CODE discription

+1

肯定。枚舉不是定義了算術運算的類型。你可以明確地從/轉換爲int,但它很醜。 – user3159253

+0

如何將enum聲明爲具有上述值的int – RKNAYAK

+0

也許您需要構建一個有限狀態機(FSM)來正確處理程序的狀態以及狀態之間的轉換。正如@millinon建議,如果程序足夠簡單,可以使用簡單的'switch',或者查看一個現有的C++ FSM庫__ example_ http://boost-extension.redshoelace.com/docs/boost/fsm /doc/state_machine.html – user3159253

回答

0

究竟是你想實現什麼目標?儘管可以在編譯器中使用整數創建enum,但嘗試在screen_type變量上使用增量運算符(++)是否合理?如果屏幕類型爲DISPLAY_TYPE_MAX並按下右按鈕,會發生什麼情況?

這是可能的強制編譯器接受你enum/int轉換,但這樣做將會使代碼難以閱讀。

一個enum的目的是限制變量的值,以一個由枚舉含有。這幾乎就像創建一個新的變量類型,並聲明該類型被限制爲一組特定的值。從這個意義上說,enum並不是真正意義上的數學價值(如int),所以在其中一個上使用++沒有意義。

作爲替代方案,我建議使用switch或者只是寫一個函數來執行正確的按鈕操作。

+0

我有5個鍵:上/下/右/左/選擇。和菜單顯示和設置。這5個鍵用於循環內用於不同目的。 @開始默認顯示:日期和時間。如果右鍵按下更改顯示座標,則再次更改枚舉值。我正在使用切換鍵來採取行動。 – RKNAYAK

0

枚舉值不假設有算術運算。它是一個數值有限的集合。

雖然你可以在c11中聲明enum的底層類型來操縱它。但是arduino的avr編譯器可能不支持它。

可以改變枚舉成INT /字節的類型,以及定義枚舉值作爲整數值。

#define DATE_TIME (0) 
// other values. 
int display_type;