다른 사람의 코드를 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
저는 대부분의 인터넷 검색을 아무 소용이 없으므로 아무 도움도받지 못했습니다.
많은 감사합니다 :)
당신이'DEFINE_SINGLETON' 매크로 어딘가에 것을 사용하십니까 : 개인적으로 나는이 선호
? –
죄송합니다. 사용중인 매크로 예제를 포함했습니다. – namford