Win32 コンソール アプリケーションに A.cpp と B.cpp という 2 つのファイルがあります。
どちらのファイルにも、次の 2 行のコードのみが含まれています。
#include "stdafx.h"
int k;
コンパイル時にエラーが発生する
Error 1 error LNK2005: "int k" (?a@@3HA) already defined in A.obj
何が起こっているのか分かりません。
誰かこれを私に説明してくれませんか?
ベストアンサー1
なぜこのエラーが発生するのでしょうか?
あなたは壊した一つの定義ルールそのため、リンクエラーが発生します。
推奨される解決策:
2 つの cpp ファイルで同じ名前の変数が必要な場合は、エラーを回避するために名前のない名前空間 (匿名名前空間) を使用する必要があります。
namespace
{
int k;
}
複数のファイル間で同じ変数を共有する必要がある場合は、 を使用する必要がありますextern
。
ああ
extern int k;
.cpp ファイル
#include "A.h"
int k = 0;
B.cpp
#include "A.h"
//Use `k` anywhere in the file