C 中使用函式模板出現「無法解析的外部符號」問題

2021-09-29 02:06:25 字數 683 閱讀 7107

在寫程式中使用了函式模板 template之前執行過程沒有什麼問題,當我把函式放到另乙個編譯單元之後出現了「無法解析的外部符號」問題。原因就出在類模板上。

首先,乙個編譯單元(translation unit)是指乙個.cpp檔案以及它所#include的所有.**件,.**件裡的**將會被擴充套件到包含它的.cpp檔案裡,然後編譯器編譯該.cpp檔案為乙個.obj檔案。不同的cpp檔案是分開編譯的。再由聯結器(linker)進行連線成為乙個.exe檔案。

在函式模板所包含的cpp檔案中,如果沒有對此模板進行例項化的過程,所編譯的obj檔案沒有對類模板進行例項化,主函式的cpp檔案也不會對此類模板進行例項化。也就不會生成二進位制檔案。

也就是說

template

t test(t a,t b)

在編譯過程只有在同乙個cpp檔案及其include的檔案中有引用函式模板的過程,函式模板才會轉化成對應的函式。比如有int test(1,3),這個時候編譯的過程中就會生成int test(int ,int)這個函式,如果沒有函式模板呼叫的過程,就不會生成任何函式。

解決方法:

將類的宣告和定義放在同乙個.**件中。

在類模板出現的cpp檔案對應的.**件中include  .cpp檔案。

在主函式所在的main.h中include  .cpp檔案。

參考:更詳細

C 函式模板使用

一.函式模板的使用 什麼是函式模板 就是建立乙個通用函式,其函式型別和形參型別不具體指定,用乙個虛擬的型別來代表,在個通用函式就稱為函式模板。函式模板的定義 格式 函式模板由三個部分組成 模板說明 函式定義 函式模板呼叫 1 模板說明 template 型別形式參數列 型別形式參數列 typenam...

c 函式模板的使用

include 函式模板的使用 define max a,b a b a b 巨集定義 using namespace std templatetype max type a,type b 整形數和實型數進行比較 char max char a,char b 字串的模板 void main exam...

C 函式模板的使用

在 c 函式過載 一節中,為了交換不同型別的變數的值,我們通過函式過載定義了四個名字相同 引數列表不同的函式,如下所示 交換 int 變數的值 void swap int a,int b 交換 float 變數的值 void swap float a,float b 交換 char 變數的值 voi...