假设我有一个像这样的头文件:
ABC.h
class A {
int d = 5;
int e = 6;
};
然后我将 ABC.h 包含到两个源 CPP 文件中。那么当链接器将编译单元链接在一起时,我是否会得到 2 个类 A 的定义?但是当我测试这个实验时,为什么链接器没有提示呢?我很困惑。
我正在使用 Visual Studio 2017 进行编译。
最佳答案
这个问题有两种可能的答案。
- 没有错误,否则就不可能生成任何有用的程序。在多个翻译单元中重复的类定义是正常的,并且在每个程序中都是预期的。因此,该语言的定义方式使其能够正常工作。
- 没有错误,因为此类定义不会创建任何可能导致多个定义错误的全局符号。全局符号通常由具有外部链接的非内联变量或函数的定义创建。该头文件中没有这样的定义。类及其非静态成员没有链接。
关于c++ - 为什么将 1 个头文件包含到两个 CPP 文件中不会导致重新定义错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54623523/