尝试序列化自定义类时出现错误。
我正在使用QDataStream运算符<>来读写对象。
当我尝试编写或读取 bool 值时发生错误:
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
时,我可以重现您的问题。
根据您的评论,由于您的成员是私有(private)的,因此您的类(class)也必须成为流运算符的 friend 。
如下编译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
的默认访问说明符设置为private。否则,没有区别。