2

我在这里得到一个编译错误,我不知道代码有什么问题。我正在使用 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 会删除编译错误,但我不知道为什么。无论如何,我需要这个常量。

4

2 回答 2

5

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

类型要求

T 必须满足 MoveAssignable 的要求。

并且 classDummy有一个 const 成员const string ID_;,这使得它不能被默认赋值运算符赋值。

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

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

居住

于 2015-11-24T08:31:33.607 回答
0

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

string ID_;

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

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

    static const string ID_;
};

const string Dummy::ID_ = "00";

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

于 2015-11-24T08:26:29.097 回答