1. ホーム
  2. c++

[解決済み] エラー LNK2005, 既に定義されていますか?

2022-02-05 03:16:16

質問

Win32コンソールアプリケーションにA.cppとB.cppという2つのファイルがあります。

2つのファイルには、いずれも次の2行のコードだけが含まれています。

#include "stdafx.h"
int k;

コンパイルするとエラーが発生します。

Error   1   error LNK2005: "int k" (?a@@3HA) already defined in A.obj

何が起こっているのか理解できない。

どなたか解説をお願いします。

どのように解決するのですか?

なぜこのエラーが発生するのですか?

を壊しました。 1つの定義ルール となり、リンクエラーが発生します。

提案された解決策


もし、2つのcppファイルで同じ名前の変数が必要な場合は、Nameless namespace(匿名名前空間)を使用することでエラーを回避することができます。

namespace 
{
    int k;
}


複数のファイルで同じ変数を共有する必要がある場合は extern .

A.h

extern int k;

A.cpp

#include "A.h"
int k = 0;

B.cpp

#include "A.h"

//Use `k` anywhere in the file