Win32 コンソール アプリケーションで「エラー LNK2005: \'int k\' すでに定義されています」が表示されるのはなぜですか?

DDD
リリース: 2024-10-30 08:39:27
オリジナル
920 人が閲覧しました

Why Am I Getting

エラー 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!