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

如何修复C++ scalar deleting destructor相关LNK2019/1120错误

错误根因

LNK2019与后续的LNK1120链接错误的触发原因非常明确:你在graphapp.h中为GraphApp类声明了虚析构函数~GraphApp();,但在对应的graphapp.cpp实现文件中没有编写该析构函数的具体实现,链接器无法找到该函数的二进制实体,就会抛出无法解析外部符号的报错。

直接修复方案

在graphapp.cpp中补全析构函数的实现即可解决链接错误,同时在析构函数中做好资源释放避免内存泄漏,参考实现:

GraphApp::~GraphApp()
{
    // 停止并释放定时器资源
    if (graph_timer) {
        graph_timer->stop();
        delete graph_timer;
    }
    // 释放UI对象
    delete ui;
}
代码中其他会导致运行异常的隐患

补全析构函数仅能解决编译链接问题,你现有代码还有多处逻辑错误,运行时大概率崩溃或功能异常,需要一并修正:

  • 构造函数中QList <float> storedData = *new QList<float>;是错误写法:类中已经定义了同名成员变量storedData,这行代码会创建一个同名局部变量遮蔽成员变量;同时*new QList<float>会在堆上创建匿名对象,拷贝给局部变量后堆内存永远无法释放,造成内存泄漏,直接删除这行代码即可,成员变量会随对象构造自动初始化。
  • 信号槽连接存在签名不匹配问题:
    • 按钮clicked()信号无参数,但你连接的dataExport槽要求传入QList<float>参数,点击按钮时会因为参数不匹配触发崩溃。修改dataExport为无参函数,内部直接读取类成员storedData导出即可。
    • 定时器timeout()信号无参数,但你连接的dataSave槽要求传入float参数,定时器触发时会直接崩溃,需要调整dataSave逻辑,改为从业务逻辑处获取待保存数据,不要依赖信号传不存在的参数。
  • dataSave函数中ui->tableWidget->insertRow(convData);逻辑错误:insertRow的参数是待插入的行索引,你传入采集到的float数据作为索引,一旦数据值超过当前表格行数就会触发越界崩溃。正确写法是先获取当前表格总行数作为新行索引,再插入行:
    int newRow = ui->tableWidget->rowCount();
    ui->tableWidget->insertRow(newRow);
    
  • 导出CSV文件时直接写入"\n"作为换行符,在Windows环境下用Excel打开导出的文件时会出现所有内容挤在同一行的问题,替换为"\r\n"即可兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:21:21