為什麼模板不支援分離編譯?

2021-08-10 02:33:22 字數 372 閱讀 6403

在c++中模板是不支援分離編譯的。

在解釋這個問題之前,我們先來看看一段程式在編譯時要經歷哪些過程。

(1)預處理階段(生成 字尾為.i的檔案):進行巨集替換,展開標頭檔案,去掉注釋

(2)編譯階段(生成 字尾為.s的檔案):檢查語法,生成彙編**

(3)彙編階段(生成 字尾為.o的檔案):將組合語言轉化為二進位制機器碼

在c++中,模板是經過例項化之後才會生成**,在編譯階段沒生成模板函式的具體**,導致在程式執行的過程中找不到鏈結位址,所以會失敗。

那麼如何解決這個問題呢?模板不支援分離與編譯的主要原因就是模板的宣告與定義分開導致錯誤,那麼我們只需要把模板的定義放在 標頭檔案(.h檔案)中就可以了,這樣模板的定義在預處理階段就被展開啦!

為什麼模板不支援分離編譯?

在c 中,為了乙個專案的規範化我們通常把 歸類為三類 宣告檔案 實現檔案 測試檔案。比如,我們要實現乙個順序表,那麼規範化就是建立3個檔案 seqlist.h 順序表相關宣告 seqlist.cpp 順序表相關實現 test.cpp 順序表測試檔案 那麼普通順序表這樣寫一點問題都沒有,用模板實現成這...

為什麼模板不支援分離編譯

在c 中,為了乙個專案的規範,我們通常把 歸為三類 宣告檔案 實現檔案 測試檔案.比如,我要用c 實現乙個鍊錶,那麼就會建立這3個檔案 linklist.h 鍊錶的相關宣告 linklist.cpp 鍊錶的實現 test.cpp 鍊錶測試 本文忽略 那麼問題來了,普通鍊錶這樣寫起來一點問題都沒有 如...

為什麼模板不支援分離編譯

在c 中,為了乙個專案的規範,我們為您通常把 歸為三類 1 宣告檔案 2 實現檔案 3 測試檔案 比如我們要用c 實現乙個鍊錶,那麼我們就會建立這3個檔案 linklist.h 鍊錶的相關宣告 lisklist.cpp 鍊錶的實現 test.cpp 鍊錶測試 如果一旦,我們要通過類模板來實現鍊錶 仍...