2014-02-12 37 views
0

做简单的模板代码给出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

回答

2

你必须定义在他们被宣布为同一个头文件的模板 - 它的语言限制。

+0

是指..?并不完全让你..我的意思是我不能在头文件和方法def写类。在其他文件?是的,这是因为模板需要两阶段编译吗? –

+1

意思是:所有的代码都应该放在头文件中,没有CPP的模板(除非你也包含CPP文件) – fritzone

+0

是的,所有的模板代码都应该放在头文件中。 –

相关问题