Doing simple template code given here; just that I am writing separate declaration and definition
This is my header file
template <typename T>
class SmartPointerGen
{
private:
        T*  pData;
public:
        SmartPointerGen(T* pValue);
        ~SmartPointerGen();
        T&  operator* ();
        T*  operator-> ();
};
This is how I define the methods
    #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;
    }
And in main(), I try to use the same with
SmartPointerGen<Person> pPersonGen(new Person("WTF Again"));
I believe the problem is with the definition of the SmartPointerGen class, I tried following this syntax for defining templatized methods outside class, but the linker is saying unresolved symbols for destructor and overloaded operators, (BUT NOT FOR THE CONSTRUCTOR).
errors:(showing only 1, others are quite similar)
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
