![](/img/trans.png)
[英]Error with Multiple Definitions in implementation file when including appropriate header
[英]Why is header including sufficient for definitions?
据我了解; 头文件声明的东西。 现在包括 header 文件,如 #include iostream 包括 header 文件 iostream.h。 例如,这告诉编译器“有一个东西叫做:cout”。 问题:编译器如何获得 cout(或所有其他函数)的定义? 以我的理解,编译器只知道名称和类型,但不知道定义。 提前致谢。
实际上:它没有。 它需要知道对象的外观、它们提供的接口(因此对于std::cout
来说,这是一个std::ostream
stream object 的子类)并且此类对象确实存在于某处。 就是这样。 编译器然后为 object 添加占位符——就像它为 function 调用所做的那样。
编译后有第二个单元:linker。顾名思义,它将所有这些编译单元链接在一起。 如果它现在看到这样的占位符,它将用 object 或 function 的地址替换它——当然这必须存在(对于std::cout
,在 header 中有一个extern
声明,但其他一些源文件必须已经实现它没有extern
- 如果在某些库中预编译),否则会抛出 linker 错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.