繁体   English   中英

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

[英]Why doesn't including 1 header file into two CPP files cause a redefinition error?

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

ABC.h

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

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

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

这个问题有两种可能的答案。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM