Я получаю ошибку компиляции здесь, и я понятия не имею, что не так с кодом. Я использую 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.
станд :: Deque :: Стирание ожидает, что тип элемента должен быть 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";
Вы можете найти больше информации Вот об инициализации константной строки.