2016年6月5日 星期日

Visual Studio 2015與.inl檔案

今天在寫樣本(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參與建置,而令編譯器產生重復定義的錯誤。

以此文謹記此錯誤

1 則留言 :