将函数的声明和**定义(实现)**都放在头文件(.h或.hpp)中,是 C++ 开发中一种特殊但必要的模式(常见于模板、内联函数、高性能库)。然而,这种做法打破了传统的“声明在头文件,定义在源文件”的分离原则,如果处理不当,会引发链接错误、代码膨胀、编译缓慢甚至未定义行为。一、核心机制:为什么通常会出错?在深入细节前,必须理解 C++ 的编译模型:翻译单元(Translation Unit, TU)。每个.cpp文件及其包含的所有头文件构成一个独立的翻译单元。编译器单独编译每个 TU,生成目标文件(.o或.obj)。链接器将所有目标文件合并,解析符号引用。问题根源:如果你在头文件中直接写void func() { ... }而没有特殊修饰:TU A包含了该头文件 - 生成了func的代码副本(符号func被定义)。TU B也包含了该头文件 - 又生成了func的代码副本(符号func再次被定义)。链接阶段:链接器发现两个