我正在編譯一些依賴於包含防護的代碼來防止對象和函數的多重定義,但Visual Studio 2008給我的鏈接錯誤有多個定義。我不明白爲什麼,因爲我以前使用的代碼非常類似,並且沒有造成問題。我一定在做些愚蠢的事情,但我不知道它是什麼。我也嘗試去掉包含衛士並使用#pragma一次,但我得到相同的鏈接錯誤。我應該檢查什麼?爲什麼不包括曾經工作的警衛或雜注?
9
A
回答
17
如果它們是鏈接器錯誤,最可能的原因可能是標頭中定義的非內聯函數。
如果在包含在多個源文件中的頭中有一個非內聯函數,它將在每個源文件(「翻譯單元」)中定義,因此該函數將被定義爲多於一次,因此多重定義錯誤。
0
如果你遇到鏈接器錯誤...你確定你不是1)在代碼中實際定義一個函數兩次或2)試圖做一些愚蠢的事情,如源文件(與頭文件相反)#include
)?
0
這也可能是由於使用鏈接其他庫的不同版本的cstd庫引起的。請在C++/Code生成部分下檢查並確保所有項目都使用相同的設置。
相關問題
- 1. #pragma曾經或包括不在外部funcs工作的衛兵
- 2. C++包括警衛不出現工作?
- 3. 標題/包括警衛不工作?
- 4. 爲什麼在C++中不包括警衛?
- 5. 有什麼情況下你不想包括警衛?
- 6. SAS宏包括警衛
- 7. 爲什麼這不包括工作?
- 8. 米斯拉警告爲包括後衛
- 9. 內部和外部雜注之間的區別是否包括警衛?
- 10. 爲什麼不dismissWithClickedButtonIndex曾經調用clickedButtonAtIndex?
- 11. 包含問題和包括警衛
- 12. C++包括警衛似乎沒有工作
- 13. 類型是不完整的,因爲包括警衛
- 14. 什麼FILE_H堪稱包括後衛
- 15. 函數包括隨機性和警衛
- 16. 包括警衛不工作? (在y.obj中已經定義了500個類型的LNK2005 x錯誤)
- 17. JSON.NET:爲什麼使用JToken - 曾經?
- 18. 爲什麼包括bom不起作用?
- 19. 爲什麼我的../在我的包括不工作
- 20. 爲什麼一些包括衛兵有定義的價值?
- 21. 爲什麼我的jQuery Mobile包括顯然不工作?
- 22. 爲什麼在laravel中使用警衛?
- 23. Laravel什麼是警衛?
- 24. 爲什麼此警報不工作
- 25. 爲什麼重複報警不工作?
- 26. 爲什麼messsage來排隊,但不處理?它曾經工作過。 nservicebus是否需要註冊?
- 27. 爲什麼EF預加載包括不按預期工作?
- 28. 爲什麼這包括不能在jsp中工作?
- 29. 曾經工作過的SQL查詢不再工作
- 30. C包括衛兵
是的,你是對的...哎呀。謝謝! – Stewart 2009-11-24 04:52:18
你也可以通過製作模板來使它們變成弱符號 – 2009-12-09 10:39:33