- 這篇博客講述模板分離報錯原因與解決方法!
一.模板分離:
即模板的聲明寫於頭文件a.h
模板的定義寫於源文件a.cpp
在main.cpp中使用模板的情況。
// a.h
template<class T> T Add(const T& left, const T& right);
// a.cpp
template<class T> T Add(const T& left, const T& right){
return left + right;
}
// main.cpp
#include"a.h"
int main(){
Add(1, 2);
Add(1.0, 2.0);
return 0;
}
二.報錯原因
程序生成步驟: 預處理—》編譯—》彙編—》鏈接
- .h文件在預處理階段進行展開
- 編譯彙編階段,將.h寫入.cpp中,並且各。cpp源文件單獨編譯,互不影響。形成.obj文件
- 鏈接階段,將各.obj文件鏈接爲.exe文件
報錯原因: 在a.cpp編譯時,因單獨編譯,並未有將main.cpp所調用的模板實例化,所以在調試運行時會導致調用模板時找不到入口地址,而報錯。
三.解決方法
將聲明和定義放到一個文件 “xxx.hpp” 裏面或者xxx.h其實也是可以的。
注:.hpp是將頭文件與源文件合成一個文件 可以專門存放模板聲明與定義。