【发布时间】:2017-04-09 13:32:34
【问题描述】:
C++:带有 const int 的类的 vector.erase 实例给出“试图引用已删除的函数”错误 C2280
B 类有一个 const int 属性const_int。如果我创建一个包含 B 实例的向量,然后从该向量中删除一个元素 - 我会收到以下错误:
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()
{
}
源.cpp
#include "B.h"
int main() {
vector<B> test;
test.push_back(B(1));
test.erase(test.begin());
return 0;
}
【问题讨论】:
-
std::vector<>::erase需要能够分配向量的元素以折叠空间(由擦除操作创建)。由于类B包含一个常量,因此编译器会自动将赋值运算符声明为已删除,因为无法分配给常量值。请参阅类型要求 en.cppreference.com/w/cpp/container/vector/erase
标签: c++ class oop vector constants