使用类的const成员使用std :: deque :: erase编译错误

var*_*tir 2 c++ stddeque

我在这里得到一个编译错误,我不知道代码有什么问题.我正在使用g ++ 4.9.2.

#include<iostream>
#include<deque>

using std::string;
using std::deque;

class Dummy {
public:
    virtual ~Dummy(){};
    Dummy():ID_("00") {};
private:

    const string ID_;
};

int main(){
    {
    deque <Dummy> waiter;
    waiter.push_back(Dummy());
    waiter.erase( waiter.begin() );
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编辑:我知道删除const会删除编译错误,但我不知道为什么.无论如何,我需要这个const.

son*_*yao 5

std :: deque :: erase期望元素的类型应为MoveAssignable:

类型要求

T必须满足MoveAssignable的要求.

并且类Dummy有一个const成员const string ID_;,它使默认赋值运算符不能赋值.

您可以创建ID_一个非const成员,或者提供自己的赋值运算符以使其可分配.例如

Dummy& operator=(const Dummy&) { /* do nothing */ }
Run Code Online (Sandbox Code Playgroud)

生活