综上所述,第一个文件写的是类的声明(包括类中成员和方法的声明)和函数的声明,但一般来说,具体的实现是不写的。对应的同名文件(可以是不同的名字,但出于编程习惯,最好是同名)写出具体的实现,当然这个实现的源文件必须是include相应的头文件可以保证声明和定义的完整性,因为编译器只会编译代码.cpp源文件格式,而且预编译器会递归.cpp所有#include头文件复制到.cpp文件中去。然后main如果要调用实体(如变量或函数),只使用文件或其他文件include由于变量在使用前会被定义或声明,因此只能使用声明,因为编译器在链接时会找到相应的声明。 https://blog.csdn.net/lyanliu/article/details/2195632
https://blog.csdn.net/qq_45507472/article/details/117928374?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-1-117928374-blog-80727293.pc_relevant_multi_platform_whitelistv1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-1-117928374-blog-80727293.pc_relevant_multi_platform_whitelistv1&utm_relevant_index=2
1)命名空间一般放在头文件中:
2)想在头文件对应的源文件中命名空间mine中的display()函数必须使用下图1void mine::display()实现方式。不能在mine.cpp中直接加using namespace mine实现,然后直接实现display()这个函数,因为这样操作其实有一个歧义,那就是mine.cpp中,这个display函数的定义属于mine命名空间还是不属于任何命名空间的函数? 所以会报错。
https://blog.csdn.net/jyx1572676601/article/details/121719373?ops_request_misc=&request_id=&biz_id=102&utm_term=命名空间 头文件&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-1-121719373.142v33pc_rank_34,185v2tag_show&spm=1018.2226.3001.4187
1)什么是内链接和外链接:我们知道编译器只会编译代码.cpp格式源文件,预编译器将递归.cpp所有#include头文件复制到.cpp在文件中,然后编译文件,生成二进制.obj文件。所以其实每一个.cpp文件都是编译单元。每个编译单元都是独立的,彼此看不见,只能通过链接器产生关联。。内部链接是编译单元(.cpp)其他编译单位不得向其他编译单位(.cpp)显示提供其定义的函数和变量。那么这个实体(比如变量或函数)就拥有内部链接。外部链接的定义恰恰相反。在一个多文件程序中,一个实体在链接时可以与其他编译单元互动,因此该实体具有外部链接。换句话说,那些编译单元(.cpp)可以向其他编译单元提供(.cpp)提供它的定义意味着这些实体有外部链接。 https://blog.csdn.net/isscollege/article/details/73851795 2)编译器不在乎头文件,所以头文件和源文件的名称不一样也没关系。头文件只于cpp文件包含的,被包含之后,它就成了那个cpp文件的一部分,而编译器只编译.cpp文件不会单独编译一个头文件。编译器这样做后,针对每个编译器cpp生成一个文件obj文件。然后链接器把所有这些都放在一起obj文件链接成程序或程序exe或dll(或静态的lib)。如果某些实体(如变量或函数)在链接过程中找不到定义,则会报告link错误,这还没有结束,链接也会检查,比如不同函数f的函数cpp文件中有很多定义,都是外部链接,链接器会报告重复定义的错误。 3)对于模板,声明和定义应该写在头文件中。