2014-12-13 1 views
0

저는 C++을 처음 사용합니다. 이제 수업을 듣기 시작했고 정적에 멍청한 문제가 있습니다.정적 사용시 해결되지 않은 외부 기호

main.obj : error LNK2001: unresolved external symbol "public: static class Helper* Test::helper" ([email protected]@@[email protected]@A) 

내 코드에 어떤 문제가 :

class Test 
{ 
public: 
    Test(){}; 
    ~Test(){}; 
    static void test(); 
    static Helper* helper; 
}; 

void Test::test() 
{ 
    Object obj = Test::helper->getObject(); 
    //... 
} 

나는 그것이 오류를 제공 컴파일 할 때?

+1

링커는 정적'Helper' 멤버의 인스턴스를 찾을 수 없기 때문에 불평합니다. 모든 정적 클래스 멤버는 전역 범위에서 고유하게 정의되어야합니다 (즉, 모든 클래스/구조체 정의를 유지해야합니다). 그래서 당신이'test'에서했던 것처럼'Helper'에 대한 정의를 제공해야합니다. 수락, 링커 오류 메시지는 세계에서 가장 사용자 친화적 인 아니지만 그냥 첫 번째 템플릿 instanciation 오류가 발생할 때까지 기다려주십시오 :) –

답변

1

당신은 Test :: helper를 정의해야합니다. 다음과 같은 내용을 학급 밖에서 작성하십시오 :

Helper* Test::helper = new Helper; 
2

첫 번째 대답은 정확합니다. 그 이유는 클래스 정의 외부의 정적 객체에 메모리를 할당해야하기 때문입니다. 헤더 파일에 클래스를 정의하고이를 여러 cpp 파일에 포함하면 컴파일러는 '도우미'가 가리키는 객체를 어디서 어떻게 만들고 싶은지 알 수 없습니다.

+0

정당화 감사합니다 :) – lulas

관련 문제