链接阶段出现多重定义错误
Multiple definition error at the linking stage
如果我的项目由两个翻译单元a.cpp和b.cpp组成,并且有h.cpp具有函数定义。在这种情况下,每个.cpp文件都会成功编译,但我们会在链接阶段得到多个定义。为了避免这种情况(如果您没有将定义放在单独的.cpp文件中(,您可以使此函数
- 内嵌
- 静态的
- 静态内联
- 用空命名空间包围它
有人可以解释这四种方法之间的区别,哪个更好用。如果是模板函数会发生什么,会不会有任何问题?
这些是对前 3 个声明的有用解释:
- 内嵌
- 静态的
- 静态内联
第四种选择是在某些情况下需要研究的特殊情况。
对于模板,您必须记住,所有功能都必须在同一文件中定义,通常是.h
或.hpp
。如果要将定义与实现分开,请记住在定义函数的文件末尾包含您的.cpp
或实现函数的文件。
相关文章:
- 使用命名空间时出现多个定义错误
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 尝试调用 .h 文件中定义的变量时出现变量未定义错误
- 在头文件和 cpp 文件中使用一次 #pragma 时出现结构重定义错误
- 链接阶段出现多重定义错误
- 避免模板类中的重定义错误
- 即使我没有包含多个文件,C++中的多个定义错误
- 跨多个类的全局变量而不会出现重定义错误?
- 尝试运行 wasm 函数时出现模块未定义错误
- C++ 预期的左大括号以及重定义错误
- C++:成员的越界声明必须是纯虚函数的定义错误
- c++中数组的未定义错误
- Visual C:模板类中的自定义错误消息
- 为什么C++模板不会导致多个定义错误?
- 只有一个定义/声明时标头声明变量的多堆定义错误
- C++ 在多个其他类中使用单个类 - 编译时出现多个定义错误
- 基类未定义.错误 C2504
- Q 斯坦达项重定义错误
- 可视化C++中的结构定义错误
- VC++ C2011 重定义错误 - 未使用的头文件