相关文章推荐
奋斗的针织衫  ·  unity ...·  1 年前    · 
想表白的海龟  ·  Searchable WPF ...·  2 年前    · 
重情义的芹菜  ·  用 Arthas 定位 Spring ...·  2 年前    · 

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

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

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

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

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

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

C++Error2208:...尝试引用已删除的函数在用自己编写的类实例化c++stl容器vector时,调用了vector.erase()方法,结果编译器报了以下错误错误 C2280 “(类名)::operator =(const (类名) &)”: 尝试引用已删除的函数 F:\vs2015\VC\include\x
C++ 为类中提供类成员的初始化列表 类对象的构造 顺序是这样的:1.分配内存,调用构造 函数 时,隐式/显示的初始化各数据 成员2.进入构造 函数 后在构造 函数 中执行一般计算 使用初始化列表有两个原因: 1.必须这样做:如果我们有一个类成员,它本身是一个类或者是一个结构,而且这个成员它只有一个带参数的构造 函数 ,而没有默认构造 函数 ,这时要对这个类成员进行初始化,就必须调用这个类成员的带参数的构造 函数 ,如果没有初始化列表,那么他将无法完成第一步,就会报错。 代码如下:class  ABC  … { public :          ABC( int  x, int  y, int  z); priv
结果在 A * a = new A() 时提示错误 “ error C2280: “ 尝试 引用 删除 函数 ” 结果发现问题所在:在 className objectName 中,其析构 函数 没有 public 造成的。 class classNa...
无法 引用 函数 “std::basic_ostream<_CharT, _Traits>::basic_ostream(const std::basic_ostream<char, std::char_traits> &) [其中 _CharT=char, _Traits=std::char_traits]” (已隐式声明) – 它是已 删除 函数 在打出以下代码出现了这个错误。 #include using namespace std; class Myint frien
在Map中直接 删除 内容将抛出 java.util.ConcurrentModificationException 异常,如果要 删除 可以用Iterator的remove()方法。 以下代码报错:
在使用自己编写的类实例化 c++ linklist,结果编译器报了以下错误 错误 C2280 “LList::LList(const LList &)”: 尝试 引用 删除 函数 l 从错误的内容看,似乎是自己的类的赋值构造 函数 尝试 调用却发现其已被 删除 。 一般而言,对象的赋值构造 函数 如果开发者没有提供,则编译器会生成默认的赋值构造 函数 。然...
学习 C++ 的右值 引用 的时候,发现一个错误 1>e:\work\jutiltest\jutiltest\main.cpp(88): error C2280: “MyString::MyString(const MyString &)”: 尝试 引用 删除 函数 1>e:\work\jutiltest\jutiltest\main.cpp(72): note: 编译器已在此处生成“MyString::MyString” 1>e:\work\jutiltest\jutiltest\main
怎么解决这个问题*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL: LED_DAT MODULE: .\Objects\led.obj (LED)
这个错误消息表明在编译项目时,在两个不同的源文件中都出现了名为 LED_DAT 的公共符号的定义。这意味着你的代码中存在多个文件定义了 LED_DAT 常量或变量。 要解决这个问题,需要找到这些重复定义的源文件,然后修改代码使得只有一个文件定义 LED_DAT。 举个例子,如果文件 A 和文件 B 都定义了 LED_DAT,你可以在文件 A 中 删除 LED_DAT 的定义,然后在文件 B 中使用 extern 关键字声明 LED_DAT,这样就能够在文件 B 中使用文件 A 中的 LED_DAT 定义了。 关于 extern 关键字,它用于在 C/ C++ 中声明一个变量或 函数 是在别的文件中定义的,并非在当前文件中定义。使用 extern 关键字声明的变量或 函数 在未定义的情况下会被视为 extern 类型,即全局变量。