类模板和成员函数模板并不是类和成员函数定义,它们只是C++编译器指令,仅仅说明了如何生成类和成员函数定义。模板的具体实现被称为实例化。由于模板不是函数,它们不能单都编译,模板必须与特定的模板实例化请求一起使用,因此不能将模板成员函数放在独立的实现文件中,最简单的方法是将所有模板信息放在一个头文件中。
如果模板成员函数放在独立的实现文件中,编译时将报错,将提示“C++ error LNK2019: 无法解析的外部符号”。
#ifndef _COMPARE_H_
#define _COMPARE_H_
template<class T>
class Compare
{
T a;
T b;
public:
Compare(T cp1,T cp2);
~Compare();
T Max();
T Min();
};
template<class T>
Compare<T>::Compare(T cp1, T cp2)
{
a = cp1;
b = cp2;
}
template<class T>
Compare<T>::~Compare()
{
}
template<class T>
T Compare<T>::Max()
{
if (a >= b)
return a;
else
return b;
}
template<class T>
T Compare<T>::Min()
{
if (a >= b)
return b;
else
return a;
}
#endif