C++ 链接阶段出现多个定义错误

C++ 链接阶段出现多个定义错误,c++,C++,如果我的项目由两个翻译单元a.cpp和b.cpp组成,并且有一个h.cpp具有函数定义。在本例中,每个.cpp文件都将被成功编译,但我们将在链接阶段获得多个定义。为了避免这种情况(如果不将定义放在单独的.cpp文件中),可以使用此函数 内联 静态 静态内联 用一个空名称空间将其包围 有人能解释一下这四种方法之间的区别吗?哪种方法更适合使用。如果它是一个模板函数,会发生什么?会有什么问题吗?这些是对前3个声明的有用解释: 第四种选择是在某些情况下需要研究的特殊情况 如果使用模板,您必须记住,

如果我的项目由两个翻译单元a.cpp和b.cpp组成,并且有一个h.cpp具有函数定义。在本例中,每个.cpp文件都将被成功编译,但我们将在链接阶段获得多个定义。为了避免这种情况(如果不将定义放在单独的.cpp文件中),可以使用此函数

  • 内联
  • 静态
  • 静态内联
  • 用一个空名称空间将其包围

  • 有人能解释一下这四种方法之间的区别吗?哪种方法更适合使用。如果它是一个模板函数,会发生什么?会有什么问题吗?

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

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


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

    当包含包含函数定义的头文件时,您考虑的所有选项在异常情况下都很有用。通常,您只在标题中保留声明,并将声明包含在cpp文件中,并将定义保留在一个cpp文件或单独的cpp文件中。