複数の C ファイルで同じ変数を定義すると、「エラー LNK2005: すでに定義されていますか?」エラーが発生するのはなぜですか?

Patricia Arquette
リリース: 2024-10-30 01:43:29
オリジナル
760 人が閲覧しました

Why am I getting the

エラー: "エラー LNK2005: すでに定義されていますか?"

コンソール アプリケーションで、ファイル A.cpp および B.cpp のコンパイル中に予期しないエラーが発生しました。 。どちらのファイルにも次のコードが含まれています:

#include "stdafx.h"
int k;
ログイン後にコピー

ただし、コンパイル プロセスでエラーが生成されます:

Error 1 error LNK2005: "int k" (?a@@3HA) already defined in A.obj
ログイン後にコピー

このエラーは、「1 つの定義ルール」の違反に起因します。 C では、各変数、関数、オブジェクトは 1 回だけ定義できます。あなたの場合、A.cpp と B.cpp の両方で変数 "k" を定義しました。

ソリューション

無名名前空間の使用

必要に応じて両方のファイルで同じ名前の変数を使用するには、名前のない名前空間 (匿名名前空間) を利用して競合を回避できます。

namespace
{
    int k;
}
ログイン後にコピー

名前空間内で "k" をカプセル化することで、その範囲を効果的に制限します。

外部宣言の使用

複数のファイル間で "k" 変数を共有する場合は、外部宣言と定義の手法を使用できます。

A.h (ヘッダー ファイル)

extern int k;
ログイン後にコピー

A.cpp

#include "A.h"
int k = 0;
ログイン後にコピー

B.cpp

#include "A.h"

// Use 'k' variable as needed
ログイン後にコピー

このシナリオでは、A.h で変数を外部として宣言し、A.cpp で定義します。 B.cpp ファイルには、変数にアクセスするために A.h を含めるだけで、定義の競合を回避できます。

以上が複数の C ファイルで同じ変数を定義すると、「エラー LNK2005: すでに定義されていますか?」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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