2012-02-04 3 views
0

일부 공용 상수가 필요한 클래스를 선언하고 있습니다. 내 생각은 이런 식으로 사람을 선언했다 :float 상수를 선언하는 중 오류가 발생했습니다.

class MyClass { 
public: 
    const int kIntConst = 1234; 
    const float kFloatConst = 1234.567f; 
    // ...methods... 
}; 

이 방법은 int 상수 잘 작동하지만, 다음과 같은 오류와 함께 float 하나 실패, 나는이 오류를 이해 할

error C2864: 'MyClass::kFloatConst' : only static const integral data members can be initialized within a class 

음 메시지. 그것은 클래스 선언에 선언 된 부동 소수점 (상수) 상수를 가질 수 없다고 말합니다. 그래서 질문은 : 왜?! 왜 int 일 수 있지만 float이 아닌 이유는 무엇입니까?

해결 방법은 알고 있습니다. kFloatConst을 정적 const 구성원으로 선언하고 나중에 .cpp에서 초기화하면 문제가 해결되지만 이것이 내가 원하는 것은 아닙니다. 컴파일 시간 상수 (컴파일러에서 최적화 할 수있는 상수)가 필요하며 .obj 파일 연결이 필요한 상수 클래스 멤버가 아닙니다.

매크로 사용은 옵션 일 수 있지만 매크로에는 네임 스페이스가 없으므로 전역 적으로 정의 된 상수가 마음에 들지 않습니다.

+1

+1

이 게시물의 첫 번째 (수락) 답변보기 : http://stackoverflow.com/questions/370283/in-class-in-class-static-const-member-in-a-class –

+0

정적 const in-class를 초기화 할 수 있습니다. – Pubby

답변

2

일반적으로 클래스 선언 안에 상수를 정의 할 수 없습니다.

그러면 정수 상수 이 허용됩니다. 따라서 int 상수는 규칙이 아니라 예외입니다.

+0

감사. 의견을 제공하는 링크를 통해 확실한 답을 얻을 수있었습니다. – real4x

관련 문제