コンソール アプリケーションで、ファイル 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 サイトの他の関連記事を参照してください。