C++Error2208:…尝试引用已删除的函数
在使用自己编写的类实例化c++stl容器vector时,调用了vector.erase()方法,结果编译器报了以下错误

错误 C2280 “(类名)::operator =(const (类名) &)”: 尝试引用已删除的函数 

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

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

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

该类含有非静态的const成员变量
该类含有非静态的reference成员变量
该类含有不能被拷贝的成员变量
该类含有不能被拷贝的基类
该类含有用户定义的移动构造函数或者移动赋值函数
自己编写的类中有const成员变量, 将其改成static 或者去掉const 或者添加赋值构造函数,就可以消除这个error.

最新文章

  1. Js中强大的Promise异步机制
  2. win7双系统安装ubuntu并配置常用软件
  3. 按Enter键后Form表单自动提交的问题
  4. WPS Office Pro 2016 专业版
  5. [Android] View.setTag(key,Object) (java.lang.IllegalArgumentException: The key must be an application-specific resource id.)
  6. iOS 多线程及其他补充
  7. 【CSS3】---first-of-type选择器+nth-of-type(n)选择器
  8. CodeBlock使用技巧
  9. [Qt] Mask 蒙版
  10. DB主从一致性架构优化4种方法
  11. node.js 模块化
  12. sqlserver 查询 inner join 同一表2次 只出一条查询结果
  13. helm安装redis+Sentinel集群搭建
  14. layui(一)——layDate组件常见用法
  15. 从percona server 5.7换到mariadb 10.2
  16. MySQL 遇到错误集锦
  17. ssh 认证
  18. JDK1.5多线程提高
  19. 学习Mybatis的两个必须的jar包分享
  20. day16 常用类(String、StringBuffer、StringBuilder)

热门文章

  1. 什么是云解析DNS?
  2. 什么是文件存储NAS
  3. 【AtCoder】ARC064
  4. Kubernetes组件-DaemonSet
  5. while循环,格式化输出,运算符及编码初识
  6. shell习题第12题:批量创建用户
  7. Vasya's Function CodeForces - 837E (gcd)
  8. web储存的初级运用
  9. Vue.prototype详解
  10. Oracle cmd 命令