今天在寫樣本(template)時,使用了Visual Studio 2015的類別精靈產生標頭檔(.h)跟實作檔(.cpp),為了維持標頭與實作分離,我改了副檔名成標頭檔(.hpp)跟實作檔(.inl),沒想到編譯時,竟然會產生重復定義,而且完全不知道原因...
爬文好久之後,發現stackoverflow上的這篇Why is this simple template class breaking in VS 2013 and not VS 2010
根據此文的說法,我重新新增.inl時,此問題就解決了!!
為了瞭解原因,我檢查了這兩種方式的生成的檔案。
.cpp與.inl最大的差異在項目類型,.cpp是"C/C++編譯器",而.inl卻是"不參與建置",這時我才知道重復定義的錯誤是如何產生的.....
因為改檔名對Visual Studio內部檔案的屬性設定,並不會產生影響,所以單純改檔名時,造成項目類型錯誤,導致.inl參與建置,而令編譯器產生重復定義的錯誤。
以此文謹記此錯誤
C ++编程示例代码片段
回覆刪除计算与矢量模板数组的总和