首頁 >後端開發 >C++ >為什麼我的 Win32 控制台應用程式中出現'Error LNK2005: Multiple Definitions”錯誤?

為什麼我的 Win32 控制台應用程式中出現'Error LNK2005: Multiple Definitions”錯誤?

DDD
DDD原創
2024-10-31 00:45:02924瀏覽

Why am I getting the

錯誤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.cpp

A.cppA.cppB.cpp遵循這些解決方案,您可以避免k 的多個定義並成功編譯您的應用程式。

以上是為什麼我的 Win32 控制台應用程式中出現'Error LNK2005: Multiple Definitions”錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn