Выполнение простого кода шаблона, приведенного здесь; просто я пишу отдельное объявление и определение
Это мой заголовочный файл
template <typename T>
class SmartPointerGen
{
private:
T* pData;
public:
SmartPointerGen(T* pValue);
~SmartPointerGen();
T& operator* ();
T* operator-> ();
};
Вот как я определяю методы
#include "SmartPointer_Generic.h"
template <typename T>
SmartPointerGen<T>::SmartPointerGen(T* pValue) : pData(pValue)
{
}
template <typename T>
SmartPointerGen<T>::~SmartPointerGen()
{
delete pData;
}
template <typename T>
T& SmartPointerGen<T>::operator* ()
{
return *pData;
}
template <typename T>
T* SmartPointerGen<T>::operator-> ()
{
return pData;
}
И в main()
я пытаюсь использовать то же самое с
SmartPointerGen<Person> pPersonGen(new Person("WTF Again"));
Я считаю, что проблема связана с определением класса SmartPointerGen
, я пытался следовать этому синтаксис для определения шаблонных методов вне класса, но компоновщик говорит о неразрешенных символах для деструктора и перегруженных операторов (НО НЕ ДЛЯ КОНСТРУКТОРА).
ошибки: (показаны только 1, остальные очень похожи)
main.obj : error LNK2019: unresolved external symbol "public: __thiscall SmartPointerGen<class Person>::SmartPointerGen<class Person>(class Person *)" (??0?$SmartPointerGen@VPerson@@@@QAE@PAVPerson@@@Z) referenced in function _main