Skw*_*eur 4 c++ serialization qt
我在尝试序列化自定义类时遇到错误.我正在使用QDataStream运算符<<和>>来编写和读取我的对象.
当我尝试写或读取布尔值时发生错误:
error: ambiguous overload for 'operator<<' (operand types are 'QDataStream' and 'const bool')
Run Code Online (Sandbox Code Playgroud)
QDataStream & operator << (QDataStream & out, const sys_settings & Value)
{
out << Value.myBool
<< Value.someString;
return out;
}
Run Code Online (Sandbox Code Playgroud)
QDataStream & operator >> (QDataStream & in, sys_settings & Value)
{
in >> Value.myBool;
in >> Value.someString
return in;
}
Run Code Online (Sandbox Code Playgroud)
您很可能不会包含相关标头.如果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;
}
Run Code Online (Sandbox Code Playgroud)
注意struct Foo { int a; int b; };相当于class Foo { public: int a; int b; };.C++ struct只是一个默认访问说明符设置为public的类.A class将默认访问说明符设置为private.否则,没有区别.