1

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”

4

0 回答 0