C++:具有const int的类的vector.erase实例给出“尝试引用已删除的函数”错误C2280C++:具有const int的类的vector.erase实例给出“尝试引用已删除的函数”错误C2280
B类有一个const int属性const_int
。如果我让乙实例的向量,然后删除其中的向量元素 - 我得到以下错误:
Error C2280 'B &B::operator =(const B &)': attempting to reference a deleted function VectorTest c:\program files (x86)\microsoft visual studio\2017\prof\vc\tools\msvc\14.10.25017\include\xutility 2534
如果我删除const
关键字 - 错误消失。 如何在保持我的属性const_int
不变的情况下修复它? 为什么这个错误出现,vector.erase()试图从类B调用某个函数? 谢谢!
B.h
#pragma once
#include <iostream>
#include <vector>
using namespace std;
class B
{
private:
const int const_int;
public:
B(int const_int_input);
~B();
};
B.cpp
#include "B.h"
B::B(int const_int_input) : const_int(const_int_input)
{
}
B::~B()
{
}
Source.cpp
#include "B.h"
int main() {
vector<B> test;
test.push_back(B(1));
test.erase(test.begin());
return 0;
}
'std :: vector <> :: erase'需要能够分配向量的元素以折叠空间(由擦除操作创建)。由于类“B”包含一个常量,赋值运算符会自动声明为由编译器删除,因为它不可能分配为常量值。请参阅__Type requirements__ http://en.cppreference.com/w/cpp/container/vector/erase –