按照正常的分离写法,应该是这样:
- 类模板声明
#include <iostream>
using namespace std;
template<class T>
class ClassTemplatehcpp
{
public:
ClassTemplatehcpp(T name);
void Print();
private:
T m_name;
};
- 类模板实现
#include "ClassTemplatehcpp.h"
template<class T>
ClassTemplatehcpp<T>::ClassTemplatehcpp(T name)
{
m_name = name;
}
template<class T>
void ClassTemplatehcpp<T>::Print()
{
cout << m_name;
}
- 在编译的时候,不会报错,但如果调用此类模板,就会报链接错误。
ClassTemplatehcpp<int> ct(100);
ct.Print();
原因是:.cpp文件时独立编译,如果在文件中没有找到函数定义,就会设置一个函数符号,让链接器在链接的时候查找。如果找到,就正常通过,如果找不到,就会报错。类模板在.cpp编译时,没有生成具体类,在函数调用的时候,才会生成。 所以链接器找不到,就会报错。
- 解决方案
在调用的时候,包含.cpp文件。运行结果如下: