我最近遇到一个问题。
我有三个文件,啊,B.cpp,C.cpp:
啊
#ifndef __A_H__
#define __A_H__
int M()
{
return 1;
}
#endif // __A_H__
B.cpp
#include "A.h"
C.cpp
#include "A.h"
当我通过 MSVC 编译这三个文件时,出现错误:
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__
没有更多的错误!有人可以告诉我发生了什么吗?