ホームページ > バックエンド開発 > C++ > Win32 コンソール アプリケーションで「エラー LNK2005: 複数の定義」エラーが発生するのはなぜですか?

Win32 コンソール アプリケーションで「エラー LNK2005: 複数の定義」エラーが発生するのはなぜですか?

DDD
リリース: 2024-10-31 00:45:02
オリジナル
931 人が閲覧しました

Why am I getting the

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート