C++Error2208:...尝试引用已删除的函数
2024-08-31 15:20:49
C++Error2208:…尝试引用已删除的函数
在使用自己编写的类实例化c++stl容器vector时,调用了vector.erase()方法,结果编译器报了以下错误
错误 C2280 “(类名)::operator =(const (类名) &)”: 尝试引用已删除的函数
从错误的内容看,似乎是自己的类的赋值构造函数被尝试调用却发现其已被删除。
在翻阅了资料后发现,erase方法会在将对象删除后,将所有该对象之后的对象向前移动。此时会调用该对象的赋值构造函数。
一般而言,对象的赋值构造函数如果开发者没有提供,则编译器会生成默认的赋值构造函数。然而,默认的赋值构造函数在以下几种情况会被删除。
该类含有非静态的const成员变量
该类含有非静态的reference成员变量
该类含有不能被拷贝的成员变量
该类含有不能被拷贝的基类
该类含有用户定义的移动构造函数或者移动赋值函数
自己编写的类中有const成员变量, 将其改成static 或者去掉const 或者添加赋值构造函数,就可以消除这个error.
最新文章
- Js中强大的Promise异步机制
- win7双系统安装ubuntu并配置常用软件
- 按Enter键后Form表单自动提交的问题
- WPS Office Pro 2016 专业版
- [Android] View.setTag(key,Object) (java.lang.IllegalArgumentException: The key must be an application-specific resource id.)
- iOS 多线程及其他补充
- 【CSS3】---first-of-type选择器+nth-of-type(n)选择器
- CodeBlock使用技巧
- [Qt] Mask 蒙版
- DB主从一致性架构优化4种方法
- node.js 模块化
- sqlserver 查询 inner join 同一表2次 只出一条查询结果
- helm安装redis+Sentinel集群搭建
- layui(一)——layDate组件常见用法
- 从percona server 5.7换到mariadb 10.2
- MySQL 遇到错误集锦
- ssh 认证
- JDK1.5多线程提高
- 学习Mybatis的两个必须的jar包分享
- day16 常用类(String、StringBuffer、StringBuilder)