일부 공용 상수가 필요한 클래스를 선언하고 있습니다. 내 생각은 이런 식으로 사람을 선언했다 :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 파일 연결이 필요한 상수 클래스 멤버가 아닙니다.
매크로 사용은 옵션 일 수 있지만 매크로에는 네임 스페이스가 없으므로 전역 적으로 정의 된 상수가 마음에 들지 않습니다.
이 게시물의 첫 번째 (수락) 답변보기 : http://stackoverflow.com/questions/370283/in-class-in-class-static-const-member-in-a-class –
정적 const in-class를 초기화 할 수 있습니다. – Pubby