我在这里遇到编译错误,我不知道代码有什么问题。我正在使用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会删除编译错误,但我不明白为什么。无论如何,我需要这个const。
答案 0 :(得分:5)
std::deque::erase期望元素的类型应为MoveAssignable:
类型要求
T必须符合MoveAssignable的要求。
类Dummy
有一个const成员const string ID_;
,它使默认赋值运算符无法赋值。
您可以使ID_
成为非const成员,或者提供您自己的赋值运算符以使其可分配。 e.g。
Dummy& operator=(const Dummy&) { /* do nothing */ }
答案 1 :(得分:0)
您应该删除const
前缀,以便更改字符串:
string ID_;
或者将其更改为静态变量并按如下方式初始化:
class Dummy {
public:
virtual ~Dummy(){};
Dummy() {};
private:
static const string ID_;
};
const string Dummy::ID_ = "00";
您可以找到有关const字符串初始化的更多信息here。