C++模板,不同的声明和定义,链接器无法解析符号

C++ Template, different declaration and definition, linker not able to resolve the symbols

本文关键字:符号 链接 模板 C++ 声明 定义      更新时间:2023-10-16

做这里给出的简单模板代码;只是我正在编写单独的声明和定义

这是我的头文件

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

您必须在声明模板的同一头文件中定义模板 - 这是语言限制。