|

楼主 |
发表于 2021-5-14 20:33:45
|
显示全部楼层
嗯,这个我知道,不是这个问题
我是在测试分散编译过程中用匿名名称空间来隐藏辅助函数的过程中发现的这个问题,以前没有注意,就是这里有三个文件,接口文件:Dtime.h,实现文件:Dtime.cpp,驱动文件:main.cpp,在Dtime.cpp文件中我定义了一个辅助函数readHour来辅助实现Dtime.h中声明的类的一些方法,这个函数没有被用户访问的必要,所以把它放在Dtime.cpp的匿名名称空间里面.然后在主函数里定义了另一个同名readHour函数,此时我用include"Dtime.cpp"的时候,发现出现了readHour重复定义的问题,
然后我就发现书中的main文件只包含了#include"Dtime.h"接口文件,而没有include"Dtime.cpp"文件.所以就想问主函数里为什么可以不用include"Dtime.cpp",如果没有这条语句,那Dtime.h文件里声明的函数不就都没有定义了吗,为什么程序还是可以运行,程序是怎么知道从哪里去找头文件中函数的实现的?
我用的是vscode,下面是其中的tasks.json文件,之前我是用注释掉的哪一行语句来直接编译所有该目录下所有文件的,所以没发现这个问题,现在换成第10行和第12行的那两条语句,编译了Dtime.cpp文件,但主函数中并没有#include"Dtime.cpp",那它们是怎么连接的
|
|