我學習如何創建一個使用Visual Studio 2010中那麼測試多個符號庫,我只是寫 -圖書館與多個模板定義
add.cpp
template <typename T>
T fooBar(T a1, T a2)
{
return (a1+a2);
}
減。 cpp
template <typename T>
T fooBar(T a1, T a2)
{
return (a1-a2);
}
就我所知,模板是一個編譯時間的概念。爲了測試這個工具在函數/函數模板之間的行爲,我寫了上面的內容。它成功創建了.lib
,即使在爲功能模板設置的最高級別上也沒有任何警告。如何在正常功能的情況下發出警告。
add.obj:警告LNK4006: 「INT __cdecl foobar的(INT,INT)」(?FOOBAR @@ @ YAHHH Z)在subtract.obj已經定義;第二個定義被忽略
add.obj:警告LNK4221:找不到公共符號;檔案成員將無法訪問
爲什麼該工具對功能和功能模板的行爲不同?
您是否嘗試過檢查'.lib'你滾出去? – 2012-04-24 20:42:52
從哪裏引用這些函數?我很擔心你在'.cpp'文件中定義了這些文件,而不是在'.h'或'.hxx'文件中。可能創建'.lib'沒有任何警告/錯誤,因爲你根本沒有編譯它們。 – 2012-04-24 20:43:41
您是否嘗試實例化模板函數,例如,通過編寫如下所示的內容:int a; int b; int c = fooBar(a,b); ?否則,編譯器永遠不會實例化模板,也不必在兩者之間選擇。 – ds1848 2012-04-24 20:46:54