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

标签 c++ header-files redefinition

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

ABC.h

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

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

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

最佳答案

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

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

关于c++ - 为什么将 1 个头文件包含到两个 CPP 文件中不会导致重新定义错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54623523/

相关文章:

对于更大的应用程序,我可以只使用一个 header 吗?

c++ - include files, typedefs 和 forward decl

c++ - 在头文件与实现 (.cpp) 文件中定义构造函数

c++ - 为什么这个编译成功?

oracle - ORA-01741 用于带有不可见字段和隐式约束的 DBMS_REDEFINITION

c++ - 主类中有多个派生类的重新定义错误

c++ - 从 CPP 代码调用 Objective-C 方法

c++ - 为什么 this 不能作为成员函数中的默认参数传递?

c++ - 未调用模板成员的重载构造函数

c++ - 为什么这个模板代码不起作用?