揭開錯誤LNK2005 的神秘面紗:理解多個定義
在專案中處理多個C 檔案時,「錯誤LNK2005,已經定義的」訊息可能是一個令人困惑的障礙。此錯誤表示專案中存在同一變數或函數的多個定義。為了深入研究這個問題,讓我們來看一個具體的例子。
有問題的場景
考慮一個包含兩個檔案的 Win32 主機應用程式:A.cpp 和 B.cpp。兩個檔案都只包含以下內容:
#include "stdafx.h" int k;
編譯時出現錯誤:
Error 1 error LNK2005: "int k" (?a@@3HA) already defined in A.obj
問題根源:違反單一定義規則
問題根源:違反單一定義規則問題根源>這個錯誤背後的基本原理是C 中強制執行的「單一定義規則」(ODR)。這項規則規定任何變數或函數在整個專案中只能有一個明確的定義。在這種情況下,A.cpp 和 B.cpp 都嘗試定義相同的變數“k”,違反了 ODR。因此,連結器遇到衝突並觸發錯誤訊息。
解決問題要解決此錯誤,您可以採用兩種主要方法:
方法1:利用無名命名空間namespace { int k; }
方法2:外部變數
extern int k;
#include "A.h" int k = 0;
以上是為什麼我的 C 專案中出現「錯誤 LNK2005:已定義」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!