类模板的.h和.cpp文件分离写法

按照正常的分离写法,应该是这样:

  1. 类模板声明
#include <iostream>
using namespace std;

template<class T>
class ClassTemplatehcpp
{
public:
    ClassTemplatehcpp(T name);
    void Print();
private:
    T m_name;
};
  1. 类模板实现
#include "ClassTemplatehcpp.h"

template<class T>
ClassTemplatehcpp<T>::ClassTemplatehcpp(T name)
{
    m_name = name;
}

template<class T>
void ClassTemplatehcpp<T>::Print()
{
    cout << m_name;

}
  1. 在编译的时候,不会报错,但如果调用此类模板,就会报链接错误。
ClassTemplatehcpp<int> ct(100);
 ct.Print();

在这里插入图片描述
原因是:.cpp文件时独立编译,如果在文件中没有找到函数定义,就会设置一个函数符号,让链接器在链接的时候查找。如果找到,就正常通过,如果找不到,就会报错。类模板在.cpp编译时,没有生成具体类,在函数调用的时候,才会生成。 所以链接器找不到,就会报错。

  1. 解决方案
    在调用的时候,包含.cpp文件。运行结果如下:
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/mafucun1988/article/details/88904063
今日推荐