Qt 序列化布尔值与 QDataStream
Qt serialization boolean with QDataStream
我在尝试序列化自定义类时遇到错误。我正在使用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
的默认访问说明符设置为专用。否则,没有区别。
相关文章:
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 变量定义到C++布尔值转换
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- 重载更少,则运算符返回相反的布尔值
- 将此布尔值传递给此函数的最有效方法是什么?
- 如何设置 c++ 类的布尔值?
- 使用 MAKEWORD / MAKEWPARAM 使用布尔值而不是布尔值
- 将 10 个线程与原子布尔值同步
- 创建类似于布尔值的变量类型
- 布尔值向量的基于范围 for 循环
- 零点和布尔值之间的比较
- 简化对两个布尔值的 4 个 if/else 检查
- 无法创建带有布尔值和矢量的地图
- 对于完成布尔值设置为 true 后未停止的循环
- fstream / ifstream / ofstream 对象如何转换为布尔值
- C++:将值赋值给原始数据类型(例如布尔值)是原子操作吗?
- 为什么布尔值不能比作最后一点?
- 如何使用返回布尔值的函数?
- 将uintptr_t转换为布尔值会使 SSO 基准速度减慢数倍
- Qt 序列化布尔值与 QDataStream