2013-04-30 4 views
7

gcc에 -std = C++ 11 플래그를 사용하고 있습니다. 내 클래스 정의에는 다음과 같은 것들이 있습니다.switch 문에서 const int 변수 사용

private: 
    const int January  = 1, 
       February = 2, 
       March  = 3, 
       ... 

제 구현에는 switch 문이 있습니다.

switch (currentMonth) 
{ 
    case January: 
     returnString = "January"; 
     break; 
    case February: 
     returnString = "February"; 
     break; 
    case March: 
     returnString = "March"; 
     break; 
    ... 

달이 일정하기 때문에 정상적으로 작동하는 것처럼 보입니다. 그러나, gcc는 저에게 스위치 명세서의 각각의 경우에

calendar.cpp:116:12: error: ‘this’ is not a constant expression 

을 제공합니다. 왜 그런가요?

+0

'116', 그것은 할당하는 경우 하나인가? 또는 '스위치'자체의 경우? –

+0

나는 더 명확한 – kennycoc

답변

11

정적이 아닌 클래스 멤버는 상수식이 아닙니다. 이보십시오 :

static constexpr int January = 1; 
+1

+1 인 것을 편집했다, 이것은 아마 그것이다. 참고로, 뭔가 C++ 03 호환,'정적 const int 1 월 = 1;'잘 작동합니다. –

+0

'static' 키워드에 익숙하지 않지만'new'를 사용하면 정적 객체를 생성한다는 인상하에있었습니다. 그래서 이것은 'new'를 사용하는 것과 같은 의미일까요? 내 소멸자가이 각각에 대해 delete를 호출해야한다는 것을 의미할까요? 아니면 완전히 다른가요? – kennycoc

+6

@kennycoc : 아니요,'new'를 사용하면 정적 객체를 만들지 않습니다. 어디에서 들었습니까? –

2

이 시도 :

귀하의 예를 라인
enum { 
January = 1, 
February = 2 
... 
}; 
+0

더 나은 방법은 컴파일 할 수있는 방법을 시도하는 것입니다. –

+0

지금 당장에 대한 액세스 권한이 없지만 작동하지 않습니까? –

+0

'enum int'는 단지'enum'이어야합니다 (또는 C++ 11에서는 어떤 이유로 기본 형식이'int'가되기를 원한다면'enum : int'를 사용해야 할 것입니다). 그리고 그 뒤에 세미콜론이 필요합니다 선언. –