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

DvQkdLdpcTxMessageProcessorReceiver类vtable未定义编译报错求助

报错根因说明

GCC中undefined reference to 'vtable for 类名'错误绝大多数场景是:类中声明了非内联、非纯虚的虚函数,但没有提供对应的实现,或是实现所在的源文件没有参与编译链接。

修复步骤

  • 第一步:补全所有声明的函数实现
    你在DvQkdLdpcTxMessageProcessorReceiver类中声明了以下三个非内联函数,必须在对应的.cpp文件中提供实现:
// 必须补全这三个函数的实现,哪怕是空实现也可以,不能只声明不实现
void DvQkdLdpcTxMessageProcessorReceiver::initialize(void) {
    // 功能逻辑
}

bool DvQkdLdpcTxMessageProcessorReceiver::runBlock(void) {
    // 功能逻辑
}

bool DvQkdLdpcTxMessageProcessorReceiver::outputReceivedData(std::vector <t_integer>& dataVector, Signal& outputSignal, bool &started) {
    // 功能逻辑
}

其中initialize和runBlock是继承自父类的虚函数,只要你在子类中重新声明了,就必须提供子类的专属实现。

  • 第二步:确认实现文件加入编译列表
    检查你的Makefile配置,确认存放上述实现的.cpp文件(通常命名为dv_qkd_ldpc_tx_message_processor_receiver.cpp)已经被加入到编译源文件列表中,没有被遗漏。

  • 第三步:可选优化,避免签名不匹配问题
    可以在子类重写的虚函数声明后加上override关键字,C++编译器会在编译阶段就检查虚函数签名是否和父类匹配,避免因签名不一致导致的隐式未实现问题:

// 修改头文件中的对应声明
void initialize(void) override;
bool runBlock(void) override;
  • 第四步:清理缓存重新编译
    旧的编译中间文件可能会导致链接异常,执行以下命令清理后重新编译即可:
    make clean && make

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:21:03