2009-10-22 3 views
0

UpdateCache 함수를 통해 업데이트 할 수있는 개체가 포함 된 데이터 캐시가 필요합니다. 그러나 LNK2001 다음에 LNK1120이 오는 문제가 있습니다.맞춤 구조체의 std :: vector를 사용하는 LNK2001

HeaderFile.h

#ifndef headerfile_included 
#define headerfile_included 
#include <vector> 
struct MyObject { 
    unsigned int A; 
    unsigned int B; 
}; 
class MyClass { 
private: 
    static std::vector<MyObject> myObjectCache; 
public: 
    static void UpdateCache(); 
}; 
#endif 

CodeFile.cpp

#include "HeaderFile.h" 
void MyClass::UpdateCache() { 
    myObjectCache.clear(); 
    /* Repopulate cache with new data */ 
} 

내가 링크에서 얻을 오류 메시지가

오류 LNK2001입니다 : 확인되지 않은 외부 기호 ""사설 : 정적 클래스 표준 : 벡터> MyClass :: myObjectCache "(? myObjectCache @ MyClass @@ 0V? $ vector @ UMyObject @@ V? $ allocator @ UMyObject @@@ std @@@ std @@ A ").

치명적인 오류 LNK1120 : 1 개 확인되지 않은 외부

내 의견은 내가 부적절한 분할에 비슷한 문제가 있었다대로 헤더 파일에 분할 및 코드 파일에 일부 문제가 있다는 것입니다. 다시 이런 문제가 발생한다면 헤더 파일에 무엇을 넣을 지, 꽤 혼란 스럽기 때문에 코드 파일에 어떤 규칙을 게시 할 수 있다면 좋을 것입니다.

답변

7

당신은 CPP 파일에이를 추가해야

std::vector<MyObject> MyClass::myObjectCache; 

이유는 정적 클래스없이 존재 이제까지는 클래스의 인스턴스가 인스턴스화 여부 존재할 필요가 인스턴스화되고 있다는 점이다. 위의 줄은 정적 인스턴스를 만들고 따라서 클래스 자체의 인스턴스를 만들지 여부에 관계없이 존재합니다.

+0

을 할 이유 * 지금 * 난 당신이 당신의 대답 : 1 개 –

+0

덕분에 업데이트를 참조하십시오. 지금 작동 :) – Etan

3

벡터가 정적 인인데 컴파일러와 관련하여 본질적으로 글로벌 엔티티이기 때문에 컴파일 유닛에 홈을 제공해야합니다. 즉, @Goz의 말씀해야 잘

std::vector<MyObject> MyClass::myObjectCache; 
관련 문제