为什么不将1个标头文件包含到两个CPP文件中会导致重新定义错误?

时间:2019-02-11 03:18:03

标签: c++ header-files redefinition

假设我有一个这样的头文件:

ABC.h

class A {
    int d = 5;
    int e = 6;
};

然后将ABC.h包含到两个源CPP文件中。然后,当链接程序将编译单元链接在一起时,是否会得到A类的2个定义呢?但是,当我测试此实验时,为什么链接程序不会抱怨呢?我很困惑。

我正在使用Visual Studio 2017进行编译。

1 个答案:

答案 0 :(得分:4)

此问题有两种可能的答案。

  1. 没有错误,因为否则将无法生成任何有用的程序。这种在多个翻译单元中重复的类定义是正常的,并且在每个程序中都是期望的。因此,以一种可以正常工作的方式来定义语言。
  2. 没有错误,因为此类定义不会创建任何可能导致多个定义错误的全局符号。全局符号通常由具有外部链接的非内联变量或函数的定义创建。此头文件中没有此类定义。类及其非静态成员没有链接。