类的const成员出现std::deque::erase编译错误

Compile Error with std::deque::erase with const members of the class

本文关键字:deque erase 编译 错误 std const 成员 类的      更新时间:2023-10-16

我在这里遇到了一个编译错误,我不知道代码出了什么问题。我使用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;
}

编辑:我知道删除const会删除编译错误,但我不知道为什么。不管怎样,我需要这个常量。

std::deque::erase要求元素的类型应为MoveAssignable:

类型要求

T必须满足MoveAssignable的要求。

Dummy有一个常量成员const string ID_;,这使得它在默认赋值运算符中不可赋值。

您可以将ID_设为非常数成员,或者提供自己的赋值运算符使其可赋值。例如

Dummy& operator=(const Dummy&) { /* do nothing */ }

实时

您应该删除const前缀,以便可以更改字符串:

string ID_;

或者将其更改为静态变量,并像这样初始化:

class Dummy {
public:
    virtual ~Dummy(){};
    Dummy() {};
private:
    static const string ID_;
};
const string Dummy::ID_ = "00";

您可以在这里找到有关const字符串初始化的更多信息。