当前位置: 首页 > news >正文

C++Error2208:...尝试引用已删除的函数

在用自己编写的类实例化c++stl容器vector时,调用了vector.erase()方法,结果编译器报了以下错误

错误 C2280 “(类名)::operator =(const (类名) &)”: 尝试引用已删除的函数 F:\vs2015\VC\include\xutility 2581

从错误的内容看,似乎是自己的类的赋值构造函数被尝试调用却发现其已被删除。

在翻阅了资料后发现,erase方法会在将对象删除后,将所有该对象之后的对象向前移动。此时会调用该对象的赋值构造函数。

一般而言,对象的赋值构造函数如果开发者没有提供,则编译器会生成默认的赋值构造函数。然而,默认的赋值构造函数在以下几种情况会被删除。

  • 该类含有非静态的const成员变量
  • 该类含有非静态的reference成员变量
  • 该类含有不能被拷贝的成员变量
  • 该类含有不能被拷贝的基类
  • 该类含有用户定义的移动构造函数或者移动赋值函数

自己编写的类中有const成员变量, 将其改成static 或者去掉const 或者添加赋值构造函数,就可以消除这个error.

相关文章:

  • Ninja 构建系统
  • ICU
  • 交叉编译详解
  • GYP,GN和Ninja
  • Visual C++ 新增功能(2003 - 2015)
  • v8引擎编译全记录2021-2-23
  • c++ mutex
  • windows标准控件的介绍与使用
  • VS2019安装 VisualSVN Server 插件
  • cef / JavaScript集成
  • MFC RichEdit使用方法
  • 代码页
  • WM_COMMAND介绍和用法
  • 堆内存和栈内存
  • 汇编——Masm使用及程序结构
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 【译】理解JavaScript:new 关键字
  • ECMAScript6(0):ES6简明参考手册
  • ECS应用管理最佳实践
  • JavaScript创建对象的四种方式
  • JavaScript设计模式与开发实践系列之策略模式
  • Java知识点总结(JavaIO-打印流)
  • jdbc就是这么简单
  • opencv python Meanshift 和 Camshift
  • Python 反序列化安全问题(二)
  • Redis在Web项目中的应用与实践
  • Swoft 源码剖析 - 代码自动更新机制
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 当SetTimeout遇到了字符串
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 今年的LC3大会没了?
  • 警报:线上事故之CountDownLatch的威力
  • 模型微调
  • 前端存储 - localStorage
  • 新书推荐|Windows黑客编程技术详解
  •  一套莫尔斯电报听写、翻译系统
  • 最简单的无缝轮播
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • ​flutter 代码混淆
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • #stm32整理(一)flash读写
  • #每日一题合集#牛客JZ23-JZ33
  • ${ }的特别功能
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (附源码)ssm码农论坛 毕业设计 231126
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (十六)一篇文章学会Java的常用API
  • (新)网络工程师考点串讲与真题详解
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程