2012-06-08 80 views
1

我遇到了鏈接我的一個C++應用程序的對象的問題。源文件全部編譯成目標文件,但其中許多依賴於具有完全特定功能模板的相同庫。鏈接器在嘗試將它們鏈接在一起時抱怨。我明白爲什麼這是,但我不知道如何解決它。如何擺脫完全專用功能模板的多個定義?

我發現this,這正好解釋了這個問題,但論壇線程從未到達OP要求解決方案的地步。 Womp,womp。

如何編譯所有的源文件,但只從庫中獲得專門的函數一次?

+0

可能重複的[函數模板專業化編譯錯誤](http://stackoverflow.com/questions/5417215/function-template-specialization-compile-error) – ildjarn

回答

2

問題在於專業化也在頭文件中實現,這是錯誤的。

您應該將實現移至源文件,或將方法標記爲inline

+0

我在印象之下(根據:http:// stackoverflow.com/questions/36039/templates-spread-across-multiple-files)不應該跨越多個文件傳播模板信息。因此內聯是唯一的方法?不是說我有這個問題 - 只是爲了確保我完全理解。 –

+0

@TomThorogood如果你專注於某些東西,那麼你就不再使用模板了。專門的模板已經是一個類或一個功能。非專用模板只是編譯器通過(on)構建實際類或函數的規則(或框架)。 –

+0

好的。我明白。謝謝! –