zoukankan      html  css  js  c++  java
  • C++Error2208:...尝试引用已删除的函数

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

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

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

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

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

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

  • 相关阅读:
    怎么删除json 键值对
    解决html 图片缓存问题
    美工常用的网站分享
    小程序授权页面
    BitMap原理
    css页面加载动画
    可能这些是你想要的H5软键盘兼容方案
    关于范式 :1NF 2NF 3NF等
    Python3学习DAY4
    DTD相关
  • 原文地址:https://www.cnblogs.com/2018shawn/p/11819164.html
Copyright © 2011-2022 走看看