2014-03-05 2 views
1

아래 함수가 열거 형입니다. 버튼을 누르면 값을 증가시키고 싶었습니다.버튼을 눌렀을 때 enum 값이 증가합니다

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 (Finite State Machine)을 작성해야 할 수 있습니다. @millinon은 프로그램이 아주 간단하다면 간단한'switch'를 사용하거나 C++ 용으로 기존의 FSM 라이브러리 중 하나를 살펴볼 것을 제안 했으므로 _for example_ http://boost-extension.redshoelace.com/docs/boost/fsm /doc/state_machine.html – user3159253

답변

0

? enum이 컴파일러에서 int로 생성 될 수도 있지만, 증분 연산자 (++)를 screen_type 변수에 사용하려고 시도하는 것이 합리적입니까? 화면 유형이 DISPLAY_TYPE_MAX이고 오른쪽 버튼을 누르면 어떻게 될까요?

컴파일러에서 enum/int 변환을 허용하도록 강제 할 수는 있지만 코드를 읽기가 더 어렵게 만들 것입니다.

enum의 목적은 변수의 값을 열거 형에 포함 된 값으로 제한하는 것입니다. 이것은 거의 새로운 변수 유형을 만들고 유형이 특정 값 집합으로 제한된다는 것을 선언하는 것과 같습니다. 이러한 의미에서 enum은 실제로 수학적 값 (예 : int)으로 취급되지 않으므로 ++을 사용하는 것이 실제로 의미가 없습니다.

대신 switch을 사용하거나 오른쪽 버튼 동작을 수행하는 기능을 작성하는 것이 좋습니다.

+0

위/아래/오른쪽/왼쪽/선택의 5 가지 키가 있습니다. 메뉴가 표시되고 설정됩니다. 이 5 개의 키는 루프 내부에서 다른 용도로 사용됩니다. @ 초기 기본 표시 : 날짜 및 시간. 오른쪽 키를 누르면 좌표가 변경되고, 다시 enum 값이 변경됩니다. 조치를 취하기 위해 스위치 키를 사용하고 있습니다. – RKNAYAK

0

열거 형 값은 산술 연산이 필요하지 않습니다. 제한된 수의 값을 가진 집합입니다.

이지만 enum의 기본 유형을 c11에서 조작하여이를 조작 할 수 있습니다. 그러나 arduino의 avr-compiler는 그것을 지원하지 않을 수도 있습니다.

열거 형을 int/byte 유형으로 변경하고 열거 형 값을 정수 값으로 정의 할 수 있습니다.

#define DATE_TIME (0) 
// other values. 
int display_type; 
관련 문제