分離編譯時模板模板報錯

2021-08-17 10:17:48 字數 558 閱讀 1811

前提

test.cpp

#include"test.h"

template

a::a()

{}test.h

template

class a

main.cpp

#include"test.h"

int main()

報錯原因是 沒有 a::a()函式鏈結錯誤。

這個原因的本質是c/c++是分離編譯的,何為分離編譯,c++程式是這樣生成的。

每乙個 .cpp 檔案首先被編譯器編譯成 相應的 .o檔案,然後再把 .o檔案鏈結成乙個可執行程式,編譯的時候各個 .cpp檔案互不影響。

這就造成了,在這個列子中, main.cpp 標頭檔案展開後,對其編譯的時候,例項化出來的模板類大概是這樣子的:

class

a_designer

;int main()

因為模板是靜態多型,它在編譯期就會被例項化出相應的結果,導致 main.o檔案中並無對應的函式,所以鏈結報錯。

freemarker解析模板報錯問題

在確定模板檔案 無誤的情況下,導致報錯的原因大概有以下原因 模板檔案編碼改變了 比如eclipse中的專案部署到tomcat下,而忘記設定tomcat編碼就會導致讀取模板檔案編碼不正確,導致程式解析報錯 解決方法 configuration cfg new configuration cfg.set...

模板引數,模板分離編譯

1.型別形參 templatevoid h t a templatevoid h t a,t b void test 這樣的呼叫方式會出錯,因為該語句給同一模板形參t指定了倆種不同的型別 int,double 2.非型別模板形參 非型別模板形參的形參和實參間所允許的轉換 允許從陣列到指標,從函式到指...

模板的分離編譯

模板為什麼不支援分離編譯 要了解這個問題,我們先來看一下程式在計算機中的執行過程,用一幅圖簡單說明。在乙個規範的c 檔案中,我們通常把乙個檔案分為 檔案宣告,檔案實現和檔案測試三個部分。在一般的編譯環境中,h檔案的 都會擴充套件到.cpp裡面,然後編譯器對.cpp檔案編譯形成.obj檔案,cpp以分...