声明和实现在一个文件中:
template<class T>
class book
{
public:
book();
~book();
private:
};
template<class T>
book<T>::book()
{
}
template<class T>
book<T>::~book()
{
}
int main()
{
book<int> b;
return 0;
}
声明和实现分开在h和cpp文件中:
潜在问题是,仅仅按照普通class的方式分开,在编译的时候,会报 link2019 错误。原因是在编译实例化模板类的文件时,模板类只有声明文件(h)被链接,其实现文件(cpp里面的部分)找不到。
解决办法:
* 1 在实例化模板类的文中开头,包含该 cpp 文件(#include "xxx.cpp")
* 2 声明和实现写在同一个h文件中;(本人不推荐这么做)
------------------- book.h -----------------------------------
#pragma once
template<class T>
class book
{
public:
book();
~book();
private:
};
------------------- book.cpp -----------------------------------
#include "book.h"
template<class T>
book<T>::book()
{
}
template<class T>
book<T>::~book()
{
}
------------------- main.cpp -----------------------------------
#include "book.h"
#include "book.cpp"
int main()
{
book<int> b;
return 0;
}