做简单的模板代码给出here;只是我写单独的声明和定义C++模板,不同的声明和定义,链接器无法解析符号
这是我的头文件
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
类的定义,我尝试使用this语法来定义类之外的模板化方法,但链接器说的是析构函数和重载运算符的未解析符号(但不适用于构造函数)。
错误:(只显示1,其他都是很相似)
main.obj : error LNK2019: unresolved external symbol "public: __thiscall SmartPointerGen<class Person>::SmartPointerGen<class Person>(class Person *)" ([email protected]@@@@[email protected]@@@Z) referenced in function _main
是指..?并不完全让你..我的意思是我不能在头文件和方法def写类。在其他文件?是的,这是因为模板需要两阶段编译吗? –
意思是:所有的代码都应该放在头文件中,没有CPP的模板(除非你也包含CPP文件) – fritzone
是的,所有的模板代码都应该放在头文件中。 –