Qt 序列化布尔值与 QDataStream

Qt serialization boolean with QDataStream

本文关键字:QDataStream 布尔值 序列化 Qt      更新时间:2023-10-16

我在尝试序列化自定义类时遇到错误。我正在使用QDataStream运算符<<和>>来写入和读取我的对象。

当我尝试写入或读取布尔值时发生错误:

error: ambiguous overload for 'operator<<' (operand types are 'QDataStream' and 'const bool')
QDataStream & operator << (QDataStream & out, const sys_settings & Value)
{
 out << Value.myBool
    << Value.someString;
 return out;
}
QDataStream & operator >> (QDataStream & in, sys_settings & Value)
{
 in >> Value.myBool;
 in >> Value.someString
 return in;
}

您很可能没有包含相关的标头。当不包括QDataStream时,我可以重现您的问题。

根据您的评论,由于您的成员是私有的,因此您的班级还必须与流操作员成为朋友。

以下编译正常:

#include <QString>
#include <QDataStream>
class C {
    // Everything here is private, the stream operator must be friends!
    bool b;
    QString s;
    C() : b(false) {}
    friend QDataStream & operator << (QDataStream & out, const C & val);
};
QDataStream & operator << (QDataStream & out, const C & val)
{
    out << val.b << val.s;
    return out;
}

请注意,struct Foo { int a; int b; };等效于 class Foo { public: int a; int b; }; 。C++ struct只是一个将默认访问说明符设置为公共的类。class的默认访问说明符设置为专用。否则,没有区别。