使用QDataStream对Qt布尔值进行序列化

4

在尝试序列化自定义类时,我遇到了错误。

我使用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;
}
1个回答

9

您可能没有包含相关的标头。当未包含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 其实就是一个默认访问修饰符为 public 的类。而 class 的默认访问修饰符是 private。除此之外,两者没有区别。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接