类的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会删除编译错误,但我不知道为什么。不管怎样,我需要这个常量。
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字符串初始化的更多信息。
相关文章:
- Capacity of a deque
- 在调试模式下引发C++ "deque iterator not dereferencable"异常
- C++中deque数据结构的大O是什么?
- 如何使用C++为我的容器 Deque 设置最大大小?
- 为什么 gcc 会给我可能未初始化的警告 deque::insert 带有过滤范围
- C++ deque 消费者总是从生产者那里得到空队列
- C++ 结构错误"调用'erase'没有匹配函数
- 如何将 string.erase() 与指针一起使用?
- 为什么 std::set.erase(first, last) 会影响从中获取 (first, last) 的容器?
- std::multimap::erase() 在迭代时
- Deque 迭代器超出范围
- 列表.erase 中的 lambda 表达式
- C++:如何正确地将 deque::front() 返回的变量从函数中传递出去?
- 调用 erase() 函数是否也会在擦除元素之前更改迭代器值?
- 'Vector.erase()' 不适用于类向量
- 有没有函数可以在擦除 c++ 中获取 deque.begin() 的 int 值?
- 为什么 deque 比队列快?
- 为什么deque::erase()调用赋值运算符
- std::deque::erase函数的时间复杂度是多少
- 类的const成员出现std::deque::erase编译错误