You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

头文件中类的成员函数在两个CPP文件实现会触发编译错误吗?

类成员函数在多个CPP文件重复实现的后果

这种情况编译阶段不会触发错误,但链接阶段会报错,具体原因如下:

  • 编译器独立处理每个源文件:编译A1.cpp时,会生成包含A::funcA定义的目标文件;编译A2.cpp时同理,也会生成包含该函数定义的目标文件。两个文件的编译过程互不干扰,因此编译器不会报错。
  • 链接阶段会校验全局符号唯一性:链接器需要将所有目标文件合并为最终可执行文件,此时发现A::funcA这个符号存在多个定义,违反了C++的单定义规则(ODR),会抛出类似multiple definition of 'A::funcA()'的错误。

示例代码:

// 头文件 A.hpp
class A
{
public:
    int funcA();
};

// 实现文件 A1.cpp
#include "A.hpp"
int A::funcA(){/* 任意实现 */}

// 实现文件 A2.cpp
#include "A.hpp"
int A::funcA(){/* 任意实现 */}

内容的提问来源于stack exchange,提问作者Liviu Dorobantu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 17:39:19