所以在main.cpp中没有任何与fun()函数定义相关的代码

作者:admin 来源:未知 点击数: 发布时间:2018年12月08日

  是指一个完整的法式或项目由若干个源文件配合实现,每个源文件零丁编译生成方针文件,最初将该项目中的所有方针文件毗连成一个单一的可施行文件的过程。

  每个.cpp源文件颠末预处置,它所包含的.h文件的代码城市被展开到此中。再颠末编译器的编译汇编等过程,彩票缩水软件哪个好将该.cpp文件改变为.obj文件,这是此文件曾经变为二进制文件,本身包含的就是二进制代码。国家授权正规彩票平台这时,该文件还不必然可以或许施行,由于并不包管此中必然有main函数,或者该源文件中的函数可能援用了另一个源文件中定义的某个变量或者函数挪用,又或者在法式中可能挪用了某个库文件中的函数,等等。这些都要通过链接器将该项目中的所有方针文件毗连成一个单一的可施行文件来处理。

  main.cpp包含的Test.h头文件只要对fun()函数的声明,所以在main.cpp中没有任何与fun()函数定义相关的代码,这里就会把fun函数看做为外部链接类型。在主函数中挪用fun函数时,会发生如上图的红框中的call号令,当然这里的地址是一个虚假的地址。链接器在Test.obj文件中找到fun函数的实现代码,将call fun地址通过jmp指令切换成真正的fun函数地址。

  对于模板来说,模板只要被挪用的时候才会被实例化,若是不被挪用它是不会实例化的。因而,若是你不挪用某模板函数或模板类时,该模板中的很多语法错误编译器是懒得查抄的。

  在施行主函数中的SeqListint list1语句时,要挪用SeqListint的机关函数,链接器在Test.obj中找不到此机关函数的定义,于是在SeqList.obj文件中找。大师若是认为SeqListint的机关函数的实现代码就在SeqList.obj中,那就错了。模板只要被挪用的时候才会被实例化!SeqList.cpp中没有任何对此机关函数的挪用,因而SeqList.obj中是没有任何相关SeqListint机关函数实现的二进制代码(由于它没有被实例化),彩票计划公式赚钱骗局链接器找不到函数实现的二进制代码,因而只能报错。

  若是我们在SeqList.cpp中添加对SeqListint机关函数的挪用,编译器就会将机关函数实例化,发生响应的二进制代码,这时候链接器就会在SeqList.obj文件中找此机关函数的定义。法式编译就不会犯错了。

  当然,我们也能够将声明和定义放到一个文件 xxx.hpp 里面,来处理这类问题。

(编辑:admin)
http://dantescafe.net/pingtaiban/520/