【问题标题】:Qt serialization boolean with QDataStream带有 QDataStream 的 Qt 序列化布尔值
【发布时间】:2013-09-10 12:36:42
【问题描述】:

我在尝试序列化我的自定义类时出错。 我正在使用 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;
}

【问题讨论】:

    标签: c++ qt serialization


    【解决方案1】:

    您很可能没有包含相关的标题。如果不包含 QDataStream,我可以重现您的问题。

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

    以下编译OK:

    #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 的默认访问说明符设置为私有。否则,没有区别。

    【讨论】:

      猜你喜欢
      • 2014-10-19
      • 2016-09-11
      • 2014-08-12
      • 1970-01-01
      • 2019-12-28
      • 1970-01-01
      • 2018-12-26
      • 2013-11-01
      • 1970-01-01
      相关资源
      最近更新 更多