2011-02-05 4 views
1

글쎄, 이것은 설명하기가 다소 복잡하다. 나는이 비슷한 보이는 헤더가 정적 라이브러리 컴파일 해요 : 내가 fooMember의 초기화를 가지고있는 cpp에있는rvct로 컴파일 할 때 전역 정적 멤버의 생성자가 호출되지 않는다

class Foo{ 
    static int Goo(){ 
     DoSomethingExciting(); 
     return 0;  
    } 
    static int fooMember; 
} 

을 :

int Foo::fooMember = Foo::Goo(); 

에 정적 라이브러리를 연결 내가 쓰고있는 응용 프로그램, 호출해야하는 Goo 메서드가 호출되지 않습니다. 정확히 말하면 DoSomethingExciting() 메서드는 전혀 호출되지 않습니다. 나는 응용 프로그램에서 Foo 클래스를 사용합니다. 내가 선 넣을 때 : 내 응용 프로그램에서 cpp에있는

int Foo::fooMember = Foo::Goo(); 

을, 나는 끈적 거리는()가 호출되는 것을 볼 (물론 내가 정적 라이브러리에서 같은 줄을 제거).

내가 겪고있는 문제의 이름을 지정하는 방법이 확실하지 않습니다. 글로벌 정적 멤버 초기화 또는 이와 유사한 문제가있는 것 같습니다.

저는 RVCT를 사용하여 컴파일하고 있습니다. Visual Studio에서 같은 시나리오를 컴파일하면 모든 것이 잘 작동합니다. RVCT가 다르게 동작하고 일부 컴파일 플래그를 추가해야 할 수도 있습니다.

Btw, 나는 또한 컴파일 된 실행 파일에 디 컴파일러를 사용하여 시도했지만 Goo()에 대한 호출을 보지 못했습니다. 메서드가 파일에 있음을 알았지 만.

나는 ... 난 내 문제 : 사전에

덕분에 충분히 분명했다 희망

답변

0

그것은 단지 정적이기 때문에 그것은 정적 객체의 생성자 인 경우라고하지만 것 메서드를 호출하는 이유는 무엇입니까?

관련 문제