在控制台應用程式中,編譯檔案 A.cpp 和 B.cpp 時遇到意外錯誤。這兩個檔案都包含以下程式碼:
#include "stdafx.h" int k;
但是,編譯過程會產生錯誤:
Error 1 error LNK2005: "int k" (?a@@3HA) already defined in A.obj
此錯誤源自於違反「單一定義規則」。在 C 中,每個變數、函數和物件只能定義一次。在您的例子中,您已經在 A.cpp 和 B.cpp 中定義了變數「k」。
如果您願意要在兩個檔案中使用相同的命名變量,可以利用無名命名空間(匿名命名空間)來避免衝突。
namespace { int k; }
透過將「k」封裝在命名空間中,可以有效地將其範圍限制為
如果您打算在多個文件之間共用「k」變量,您可以採用外部聲明和定義的技術:
A.h(頭檔)
extern int k;
A.cpp
#include "A.h" int k = 0;
B.cpp
#include "A.h" // Use 'k' variable as needed
在這種情況下,您在A.h 中將變數宣告為外部變量,並在A .cpp 中定義它。 B.cpp檔案只需要包含A.h即可存取變量,避免定義衝突。
以上是當我在多個 C 檔案中定義相同的變數時,為什麼會收到「錯誤 LNK2005:已定義?」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!