链接阶段出现多重定义错误

Multiple definition error at the linking stage

本文关键字:定义 错误 段出现 链接      更新时间:2023-10-16

如果我的项目由两个翻译单元a.cppb.cpp组成,并且有h.cpp具有函数定义。在这种情况下,每个.cpp文件都会成功编译,但我们会在链接阶段得到多个定义。为了避免这种情况(如果您没有将定义放在单独的.cpp文件中(,您可以使此函数

  1. 内嵌
  2. 静态的
  3. 静态内联
  4. 用空命名空间包围它

有人可以解释这四种方法之间的区别,哪个更好用。如果是模板函数会发生什么,会不会有任何问题?

这些是对前 3 个声明的有用解释:

  1. 内嵌
  2. 静态的
  3. 静态内联

第四种选择是在某些情况下需要研究的特殊情况。

对于模板,您必须记住,所有功能都必须在同一文件中定义,通常是.h.hpp。如果要将定义与实现分开,请记住在定义函数的文件末尾包含您的.cpp或实现函数的文件。