【C++】模板之模板分離情況

  • 這篇博客講述模板分離報錯原因與解決方法!

一.模板分離:

即模板的聲明寫於頭文件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是將頭文件與源文件合成一個文件 可以專門存放模板聲明與定義。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章