2012-05-23 2 views
0

다른 사람의 코드를 VS2010에 작성하려고합니다. 그것은 VS2005에서 잘 지어졌지만 그것을 업그레이드해야합니다. 헤더에 다음과 같이템플릿 매크로의 링커 오류 : 확인되지 않은 외부 기호

그들은 매크로를 정의 : 지금 구축 할 수있는 코드를 얻을 관리했습니다

#include <boost/scoped_ptr.hpp> 
#include <boost/utility.hpp> 
#include <boost/thread/once.hpp> 

#define DEFINE_SINGLETON(name) boost::scoped_ptr<name> Singleton<name>::_instance 

template<class T> class Singleton : private boost::noncopyable 
{ 
    public: 
     static T& instance() 
     { 
      boost::call_once(init, flag);   
      return *_instance; 
     } 

     static void init() 
     { 
      _instance.reset(new T()); 
     } 

    protected: 
     Singleton() {} 
     ~Singleton() {} 

    private: 
     static boost::scoped_ptr<T> _instance; 
     static boost::once_flag flag; 
}; 

template<class T> boost::once_flag Singleton<T>::flag = BOOST_ONCE_INIT; 

,하지만 난이 매크로에 대한 링커 오류를 많이 얻고있다 :

project1.lib(file1.obj) : error LNK2001: unresolved external symbol "private: static class boost::scoped_ptr<class ClassABC> Singleton<class ClassABC>::_instance" ([email protected][email protected]@@@@[email protected]@@@[email protected]@A) 

매크로의 예는 (소스 파일)를 사용하고 있습니다 :

#include "singleton.h" 
DEFINE_SINGLETON(ClassABC); 

나는 부스트 아주 새로운 오전과도 templat하기 es (죄송합니다), 그래서 내가 VS2005에서 모두 제대로 연결될 때 왜 이러한 오류가 발생하는지 짐작할 수 없습니다. 그것의 업그레이드를 수행하기 위해 우리는 또한 우리의 부스트 버전을 업그레이드 한 것으로, 지적, 그래서 이것은 요인이 될 수있는 가치 - 몇 가지 검사가 이미 수행 :

  • 헤더 파일을 소스 파일에 포함되어
  • > 일반 - -
  • 정보에 대한

, 나는에 다중 스레드 디버그 DLL을 컴파일하고> 추가 라이브러리 의존성 부스트 디렉토리는 (VC++ DIRS의 inproperty 페이지 아래) DIRS

  • 추가 링커에 lib 디렉토리 디렉토리를 밀어을 포함하는 추가 Win32.

    저는 대부분의 인터넷 검색을 아무 소용이 없으므로 아무 도움도받지 못했습니다.

    많은 감사합니다 :)

  • +0

    당신이'DEFINE_SINGLETON' 매크로 어딘가에 것을 사용하십니까 : 개인적으로 나는이 선호

    //add this line after BOOST_ONCE_INIT or before it, or wherever you see fit. template<class T> DEFINE_SINGLETON(T); 

    ? –

    +0

    죄송합니다. 사용중인 매크로 예제를 포함했습니다. – namford

    답변

    0

    난 당신이 게시 코드에서 매크로 어디서나 사용이 표시되지 않습니다.

    당신은로 사용할 필요가

    :

    template<class T> boost::scoped_ptr<T> Singleton<T>::_instance; 
    
    +0

    죄송합니다. 매크로 사용 예제가 포함되었습니다. – namford

    +0

    '템플릿 '부분을 사용하는 것을 잊었습니다. 내 코드를 참조하십시오. – Nawaz

    +0

    고마워요,하지만 코드는 VS2005에서 이와 같았습니다. 그리고 매크로 호출은 코드 전체에 걸쳐 (타입없이) 이렇게 사용되어 VS2005에서 잘 작동했습니다 ... 왜 VS2010에서 다른 것입니까? – namford