在Class中声明但未定义的方法

akr*_*hit 11 c++ linker compilation

我有Class声明一个方法但没有实现它.该方法不是虚函数.在相应的cpp文件中,我没有找到相同方法的定义.定义了类中声明的所有其他方法.

我编译了代码,它很好.我的印象是cpp必须强制声明已声明方法的定义.

如果有人可以详细说明同意,请感谢.我正在使用VS2010的cl编译器.

Alo*_*ave 11

您的代码将编译但它会给出链接错误.

构建项目的可执行文件涉及两个阶段:

  • 汇编
  • 链接

编译期间,编译器仅通过验证语言语义将源代码转换为目标代码.
链接期间,链接器实际上会查找符号的定义,并从多个目标文件(在编译期间创建)中创建可执行文件.

编译器分别编译每个翻译单元(.cpp +头文件)中的源代码,因此它假定定义应存在于某些其他源文件中.链接器试图找到对函数定义的引用,因此链接器将报告缺少的定义.

请注意,链接器只需链接程序使用的那些符号,
例如:如果您的程序声明了一个函数,没有提供定义,然后从不在任何地方使用/调用该函数,那么链接器不需要嵌入代码跳转到函数的目标代码驻留在任何函数调用站点的地址.
鉴于这种情况,链接器根本不需要查找函数定义.因此代码将编译和链接.

  • 恕我直言,只有在某处显式/隐式地使用/调用具有缺失定义的函数时,才会发生链接错误. (5认同)