Проблема с шаблоном
Пишу шаблонный класс-синглтон и столкнулся с такой проблемой:
SingletonHolderTest.obj : error LNK2019: unresolved external symbol "public: static void __cdecl SingletonHolder::FreeInstance(void)" (?FreeInstance@?$SingletonHolder@H@@SAXX Z) referenced in function _main
SingletonHolderTest.obj : error LNK2019: unresolved external symbol "public: static int * __cdecl SingletonHolder::GetInstance(void)" (?GetInstance@?$SingletonHolder@H@@SAPAH XZ) referenced in function _main
Код класса:
template <class T>
class SingletonHolder
{
public:
static T* GetInstance();
static void FreeInstance();
protected:
SingletonHolder(void);
virtual ~SingletonHolder(void);
private:
static T *instance;
static long references;
};
Реализация:
template <class T>
SingletonHolder<T>::SingletonHolder(void)
{
}
template <class T>
SingletonHolder<T>::~SingletonHolder(voi d)
{
}
template <class T>
T* SingletonHolder<T>::GetInstance()
{
if(!referneces)
instance=new T;
references++;
return instance;
}
template <class T>
void SingletonHolder<T>::FreeInstance()
{
references--;
if(!references)
delete instance;
}
В итоге когда пытаюсь вызвать SingletonHolder<int> ::GetInstance() или SingletonHolder<int> ::FreeInstance(), получаю вышеуказанные ошибки.
В чем тут проблема?
Среда разработки: VisualStudio .Net 2003
UPDATE: Вопрос снят.
SingletonHolderTest.obj : error LNK2019: unresolved external symbol "public: static void __cdecl SingletonHolder
SingletonHolderTest.obj : error LNK2019: unresolved external symbol "public: static int * __cdecl SingletonHolder
Код класса:
template <class T>
class SingletonHolder
{
public:
static T* GetInstance();
static void FreeInstance();
protected:
SingletonHolder(void);
virtual ~SingletonHolder(void);
private:
static T *instance;
static long references;
};
Реализация:
template <class T>
SingletonHolder<T>::SingletonHolder(void)
{
}
template <class T>
SingletonHolder<T>::~SingletonHolder(voi
{
}
template <class T>
T* SingletonHolder<T>::GetInstance()
{
if(!referneces)
instance=new T;
references++;
return instance;
}
template <class T>
void SingletonHolder<T>::FreeInstance()
{
references--;
if(!references)
delete instance;
}
В итоге когда пытаюсь вызвать SingletonHolder<int> ::GetInstance() или SingletonHolder<int> ::FreeInstance(), получаю вышеуказанные ошибки.
В чем тут проблема?
Среда разработки: VisualStudio .Net 2003
UPDATE: Вопрос снят.
