первый пост на Stackoverflow!
Итак, подведем итог моей проблемы:
Я пытаюсь сериализовать пользовательский класс, который содержит карту другого пользовательского класса (std :: map).
Так что для сериализации у меня есть:
QDataStream& operator<<(QDataStream& out, const std::map<QString, MyCLass>& i){
out << static_cast<quint32>(i.size());
for (auto& elem : i)
{
out << elem.first;
out << elem.second;
}
return out;
}
А для десериализации у меня есть:
QDataStream& operator>>(QDataStream& in, std::map<QString, MyClass>& i){
quint32 mapSize;
in >> mapSize;
i.clear();
MyClass im; //Problem here, I do not have a default constructor
QString key;
while(mapSize--){
in >> key;
in >> im;
i.insert(std::pair<QString, MyClass>(key, im));
}
return in;
}
Итак, проблема в том, что у меня нет (и я не очень хочу) конструктора по умолчанию для MyClass. Конечно, я не могу просто заявить, что я такой, и это приводит меня к моему вопросу:
Как бы вы пошли о сериализации / десериализации этого пользовательского класса?
Я пытался использовать malloc и указатель:
MyClass* im = (MyClass*) malloc(sizeof(MyClass));
Но проблема остается при вставке объекта MyClass в карту:
i.insert(std::pair<QString, MyClass>(key, *im));
выдает ошибку:
surchargesqdatastream.cpp: 84: 18: ошибка: отсутствует соответствующий конструктор для инициализации 'std :: pair'