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

C++重写父类虚函数时object file出现LNK2001链接错误如何解决?

报错原因与修复方案

核心报错原因

你遇到的LNK2001未解析外部符号错误,是两处代码编写不规范共同导致的:

  • 类成员函数实现未加作用域限定符:你在AGAM.cpp、TUI.cpp中写的getHardwareName都是独立的全局函数,不属于AGAM、TUI类的成员。链接器找不到头文件中声明的AGAM::getHardwareName虚函数的实现,就会抛出该错误。
  • 父类实现返回值非法:std::string类型不能直接接收NULL(空指针常量),即便链接通过,运行时也会触发字符串构造异常崩溃。

修复步骤

1. 修复父类AGAM的实现

修改AGAM.cpp代码,加上类作用域限定符,同时调整返回值为合法空字符串:

//----------- Parent cpp file ----------------------------
std::string AGAM::getHardwareName()  // 加AGAM::标记属于父类的成员函数
{
    return ""; // 替换NULL为空字符串
}

如果你后续不需要父类的getHardwareName有默认实现,可以直接在AGAM.h中将其声明为纯虚函数:virtual std::string getHardwareName() = 0;,但要注意该操作会让父类变成抽象类,无法实例化,不符合你需求的话不用修改声明。

2. 修复子类TUI的声明与实现

首先修改TUI.h的声明,增加override关键字(C++11及以上版本支持),显式标记该函数是重写父类的虚函数,编译期即可提前检查重写合法性:

//-------------- child class header file ---------
std::string getHardwareName() override; //child class override 

再修改TUI.cpp的实现,加上子类的作用域限定符:

//--------------- child class cpp file ----------
std::string TUI::getHardwareName(){  // 加TUI::标记属于子类的成员函数
    return mBoardName;
}

修改完成后重新编译即可解决链接报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 05:54:02