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

为什么编译多文件C++项目时会出现Undefined reference未定义引用错误?

错误原因

你在Trading_dte.cpp中重复定义了Dte类,违反了C++的单一定义规则(ODR),同时导致链接阶段无法找到Dte::addition的实现:

  • 编译Trading_dte.cpp时,你在该文件内定义的Dte类将addition方法实现在类内部,这个方法仅对当前编译单元可见,不会对外导出可链接的符号
  • 编译dummy.cpp时,引入的头文件仅声明了Dte::addition方法,链接器全局查找该方法的实现时找不到对应符号,就抛出了你收到的报错。

修复方法

方法1(推荐:类声明与实现分离)

修改Trading_dte.cpp内容,不要重复定义类,仅引入头文件后实现类方法即可:

#include "Trading_dte.hpp"

int Dte::addition(int a, int b)
{
    return a + b;
}

修改完成后再用你原来的g++ Trading_dte.cpp dummy.cpp命令编译即可正常运行。

方法2(类内实现)

如果不需要分离声明和实现,直接把addition的实现写到Trading_dte.hpp的类定义内,删除Trading_dte.cpp中的重复类定义即可,类内实现的方法默认是inline属性,不会出现符号冲突问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:45:01