エラー LNK2005: "int k" は既に定義されています
Win32 コンソール アプリケーションを複数の C ファイルとリンクすると、エラー「error LNK2005: 「A.obj で既に定義されている int k (?a@@3HA)」が発生する可能性があります。このエラーは、同じ名前の変数が複数のファイルで定義されている場合に発生します。
指定された例では、A.cpp と B.cpp の両方が変数 k を定義しています。 1 つの定義ルールに従って、各グローバル変数または関数には 1 つの定義が必要です。複数の定義があると、あいまいさやリンク エラーが発生します。
解決策:
このエラーを解決するには、次の方法を使用できます:
名前のない名前空間を使用する (匿名の名前空間):
変数 k が各ファイルに対してプライベートであることが意図されている場合は、シンボル名の衝突を防ぐために名前のない名前空間を使用します。
<code class="cpp">namespace { int k; }</code>
これにより、各ファイル内のシンボル k が分離され、他のファイルがそのシンボルにアクセスしたり再定義したりすることがなくなります。
変数を別のファイルで宣言および定義します:
共有する必要がある場合変数 k を複数のファイルにまたがる場合は、extern を使用してヘッダー ファイルで宣言し、別のコンパイル単位で定義します。
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` anywhere in the file</code>
ヘッダー ファイルで k を extern として宣言することで、他のファイルがアクセスして使用できるようになります。再定義せずに。
以上がWin32 コンソール アプリケーションで「エラー LNK2005: \"int k\" すでに定義されています」が表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。