エラー LNK2005: 複数の定義
Win32 コンソール アプリケーションには、A.cpp と B.cpp という 2 つのソース ファイルがあります。次のコードが含まれています:
<code class="cpp">#include "stdafx.h" int k;</code>
コンパイル時にエラーが発生しました:
Error 1 error LNK2005: "int k" (?a@@3HA) already defined in A.obj
説明:
このエラーは、違反が原因で発生します。 1 つの定義ルール。 C では、すべてのグローバル変数または関数は、すべての翻訳単位 (ソース ファイル) にわたって 1 つの定義のみを持つことができます。あなたの場合、A.cpp と B.cpp の両方が変数 k を定義しているため、複数の定義とリンク エラーが発生します。
解決策:
この問題を解決するにはでは、次のオプションを検討してください:
1.匿名名前空間の使用:
変数 k を A.cpp と B.cpp の両方内で使用する必要があるが、外部リンクを避けたい場合は、匿名名前空間を利用できます:
<code class="cpp">namespace { int k; }</code>
2. extern の使用:
変数 k を複数のファイルで共有する必要がある場合は、ヘッダー ファイル (A.h) で変数 k を extern として宣言し、1 つのソース ファイル (例: A.cpp) で定義する必要があります。 ):
A.h
<code class="cpp">extern int k; </code>
A.cpp
<code class="cpp">#include "A.h" int k = 0;</code>
B.cpp
<code class="cpp">#include "A.h" // Use `k` within B.cpp</code>
これらの解決策に従うことで、k の複数の定義を回避し、アプリケーションを正常にコンパイルできます。
以上がWin32 コンソール アプリケーションで「エラー LNK2005: 複数の定義」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。