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

VS2019编译C++代码报错C2280:尝试引用已删除函数如何解决?

错误根因
  • C++ 类中存在未初始化的const非静态成员时,编译器不会自动生成默认无参构造函数,会将其标记为已删除函数。你的Matrix类内定义了const size_t N;,没有给定初始值,也没有显式定义构造函数初始化该变量,因此默认构造函数不可用,调用Matrix f;时就会触发C2280报错。
    之前可以正常运行的原因大概率是你之前的代码中还没有加入这个N成员变量。
修复方案

可以根据你的实际需求选任意一种:

  1. 如果你根本不需要用到N这个成员变量,直接删除const size_t N;这行代码即可,编译器会自动生成可用的默认无参构造函数,编译直接通过。
  2. 如果你需要保留N作为固定值的常量,直接给它加类内初始值:
// 修改matrix.h中的N定义
const size_t N = 0; // 替换成你需要的固定值即可
  1. 如果你需要在创建Matrix对象时动态指定N的值,就显式声明默认构造函数,在初始化列表中完成N的初始化:
class Matrix {
public:
    const size_t N;
    // 新增显式默认构造函数
    Matrix() : N(0) {} // 括号内可以自定义N的初始值
    // 剩下的原有代码不变
};
额外注意事项

你当前调用create(10, 1, {3, 4, 5, 6, 7, 8, 9})时,传入的vector长度只有7,和10*1=10的长度要求不匹配,运行时会触发你写的错误分支输出bello,如果需要正常初始化矩阵要补全3个元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:45:01