錯誤LNK2005:多個定義
在Win32 控制台應用程式中,您有兩個來源文件,A.cpp 和B .cpp,每個包含以下程式碼:
<code class="cpp">#include "stdafx.h" int k;</code>
編譯時遇到錯誤:
Error 1 error LNK2005: "int k" (?a@@3HA) already defined in A.obj
解釋:
此錯誤來源於違反一個定義規則。在 C 中,每個全域變數或函數在所有翻譯單元(原始檔)中只能有一個定義。在您的情況下,A.cpp 和 B.cpp 都定義了變數 k,導致多個定義和連結錯誤。
解決方案:
解決此問題,請考慮以下選項:
1。使用匿名命名空間:
如果您需要在A.cpp 和B.cpp 中都使用變數k,但又想避免外部鏈接,則可以使用匿名命名空間:
<code class="cpp">namespace { int k; }</code>
2.使用extern:
如果需要在多個檔案之間共用變數k,則應在頭檔(A.h)中將其聲明為extern,並在一個來源檔案(例如A.cpp)中定義它):
A.h
<code class="cpp">extern int k; </code>
A.cpp
<code class="cpp">#include "A.h" int k = 0;</code>
A.cpp
<code class="cpp">#include "A.h" // Use `k` within B.cpp</code>A.cppA.cppA.cppB.cpp遵循這些解決方案,您可以避免k 的多個定義並成功編譯您的應用程式。
以上是為什麼我的 Win32 控制台應用程式中出現“Error LNK2005: Multiple Definitions”錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!