2012-09-21 3 views
0

클래스를 선언 한 다음 동일한 클래스의 여러 객체에서 정적 인스턴스를 사용할 수 있는지 실제로 알지 못합니다. 더 구체적으로 : 클래스의 정적 객체입니까?

class State { 
    public: 
     State(); 
     static CustomNumberDist normal_dist; 
    private: 
     int id; 
}; 

그래서 국가의 모든 인스턴스는 CustomNumberDist의 동일한 인스턴스를 포함해야합니다. 내가 컴파일하지만 그것이 유효한지 또는 나중에 문제가 발생할 수 있습니다 궁금 해서요.

+1

문제는 유효하지만 확실하지 않습니다. – Mahesh

+1

'State'의 어떤 인스턴스도'CustomNumberDist'의 인스턴스를 포함하지 않을 것입니다; 'State' 클래스와 연관된'CustomNumberDist' 인스턴스가 하나있을 것입니다. –

답변

6

선언 (헤더 파일 즉 .H)이 완벽하게 유효합니다. 그러나 정의 (.cpp 파일)에

당신은 당신이 연결 단계에 도착하면 메모리로

State::CustomNumberDist normal_dist; 

정적 개체에 대해 필요합니다 필요합니다.

0

유효하지 않습니다. 그것은 다음과 같아야합니다 :

class X 
{ 
public: 
     int normalValue = 5; //NSDMI 
     static int i; 
}; 

int X::i = 0; 

은 메모리에 장소가 필요합니다. 구체적인 객체와 관련이없는 메모리에 있습니다.

자세한 내용은 여기에서 찾을 수있다 : 당신이 준

Static Data Member Initialization

+1

어떻게 유효하지 않습니까? – delnan

+0

@delnan OP 코드에서 'normal_dist'가 초기화되지 않았습니다. 방금 선언되었습니다. 생성자를 호출해야하며 해당 코드는 ** 호출하지 않습니다. –

+0

"NSDMI"는 무엇을 의미합니까? 또한, 'normalValue'와 마찬가지로 비 정적 멤버의 클래스 초기화는 2011 년 이후에만 유효하다는 사실을 언급해야합니다. 또는 'normalValue'를 삭제할 수 있습니다. 왜냐하면이 질문에 아무런 관련이 없기 때문입니다. –