의 클래스 멤버 I 다음과 같은 상황이 :C++ 같은 종류
class Foo
{
public:
static const Foo memberOfFoo;
........
}
그래서 것은, 내가 그것을 선언 어디 같은 라인을 초기화 할 수 없습니다, 그리고 내가 통해 초기화 할 수 없습니다를 초기화 목록 생성자의 목록, 누구든지 무엇을 해야할지 알고 있습니까?
의 클래스 멤버 I 다음과 같은 상황이 :C++ 같은 종류
class Foo
{
public:
static const Foo memberOfFoo;
........
}
그래서 것은, 내가 그것을 선언 어디 같은 라인을 초기화 할 수 없습니다, 그리고 내가 통해 초기화 할 수 없습니다를 초기화 목록 생성자의 목록, 누구든지 무엇을 해야할지 알고 있습니까?
다음 클래스 정의의 외부를 넣어 추가하여, 어딘가에 (그리) memberOfFoo를 선언해야합니다 이니셜 라이저를 제공 할 수 Foo::memberOfFoo
의 정의입니다
const Foo Foo::memberOfFoo = whateverValue;
.cpp
파일에 있어야합니다 (다른 모든 개체 정의와 마찬가지로 전체 프로그램에서 한 번만 나타날 수 있습니다. 그렇지 않으면 링커 오류가 발생합니다). A::x
주소-찍은 적이 및 매개 변수를 참조로 전달되지 않습니다 만 그 유효처럼
struct A {
// sometimes, code won't have an "const int A::x;" anywhere!
static const int x = 42;
};
정의를 생략 :
때로는 정적 데이터 멤버에 대한 정의가없는 코드를 찾을 수 있습니다. 정의를 생략하는 것이 유효한 경우를 말하면서보다 공식적인 방법은 : "A :: x의 모든 용도가 즉시 A :: x의 저장된 값을 읽을 때"입니다. 많은 정적 정수 상수의 경우입니다. 이것은 당신이 초기화를 구현할 수있는 방법입니다
상수 정수형 이외의 클래스 정적은 정의 시점에서 초기화 할 수 있어야합니다. 당신은
const Foo Foo::memberOfFoo = /*construct here*/;
...
class Foo
{
public:
static const Foo memberOfFoo;
Foo(int, double)
{
...
};
};
const Foo Foo::memberOfFoo(42, 3.141592654);
...