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”