class 的 const 成员 std::deque::erase 编译错误
Compile Error with std::deque::erase with const members of the class
我在这里遇到编译错误,我不知道代码有什么问题。我正在使用 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
前缀,以便可以更改字符串:
string ID_;
否则将其更改为静态变量并像这样初始化它:
class Dummy {
public:
virtual ~Dummy(){};
Dummy() {};
private:
static const string ID_;
};
const string Dummy::ID_ = "00";
您可以找到更多关于 const 字符串初始化的信息here。
std::deque::erase expects the type of element should be MoveAssignable:
Type requirements
T must meet the requirements of MoveAssignable.
而class Dummy
有一个常量成员const string ID_;
,这使得它不能被默认赋值运算符赋值。
您可以使 ID_
成为非常量成员,或者提供您自己的赋值运算符使其可赋值。例如
Dummy& operator=(const Dummy&) { /* do nothing */ }
我在这里遇到编译错误,我不知道代码有什么问题。我正在使用 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
前缀,以便可以更改字符串:
string ID_;
否则将其更改为静态变量并像这样初始化它:
class Dummy {
public:
virtual ~Dummy(){};
Dummy() {};
private:
static const string ID_;
};
const string Dummy::ID_ = "00";
您可以找到更多关于 const 字符串初始化的信息here。
std::deque::erase expects the type of element should be MoveAssignable:
Type requirements
T must meet the requirements of MoveAssignable.
而class Dummy
有一个常量成员const string ID_;
,这使得它不能被默认赋值运算符赋值。
您可以使 ID_
成为非常量成员,或者提供您自己的赋值运算符使其可赋值。例如
Dummy& operator=(const Dummy&) { /* do nothing */ }