最近問題に遭遇しました。
Ah、B.cpp、C.cpp の 3 つのファイルがあります。
ああ
#ifndef __A_H__
#define __A_H__
int M()
{
return 1;
}
#endif // __A_H__
B.cpp
#include "A.h"
C.cpp
#include "A.h"
MSVC で 3 つのファイルをコンパイルすると、エラーが発生します。
C.obj : error LNK2005: "int __cdecl M(void)" (?M@@YAHXZ) already defined in B.obj
ご存知のように、B.obj には "M" という名前のシンボルがあり、C.obj にも "M" という名前のシンボルがあります。ここでエラーが発生します。
ただし、以下のように M メソッドをメソッド M を含むクラスに変更すると、次のようになります。
ああ
#ifndef __A_H__
#define __A_H__
class CA
{
public:
int M()
{
return 1;
}
};
#endif // __A_H__
もうエラーはありません!! 誰かが何が起こっているのか教えてもらえますか?