我在类中有一个类和一个结构:
class MyClass : public QObject
{
public:
....
struct MyStruct
{
quint8 val1;
}
};
我想重载运算符<<和>>对于结构,但我不知道该怎么做。目前,我确实喜欢这样:
class MyClass : public QObject
{
public:
....
struct MyStruct
{
quint8 val1;
QDataStream &operator<<(QDataStream &out, const MyStruct& _myStruct)
{
out << _myStruct.val1;
return out;
}
QDataStream &operator>>(QDataStream &in, MyStruct& _myStruct)
{
in >> _myStruct.val1;
return in;
}
};
};
但是不行
答案 0 :(得分:3)
您需要将运算符声明为friend
:
friend QDataStream &operator<<(QDataStream &out, const MyStruct& _myStruct)
{
out << _myStruct.val1;
return out;
}
friend QDataStream &operator>>(QDataStream &in, MyStruct& _myStruct)
{
in >> _myStruct.val1;
return in;
}
答案 1 :(得分:2)
通常,您在相同名称空间范围内将这些运算符指定为<em>非成员函数,作为它们尝试输出的类型。这是为了在使用时允许argument-dependent-lookup。
class MyClass { [...]
};
QDataStream& operator<<(QDataStream& qstr, MyClass::Mystruct const& rhs) {
[...]
return qstr;
}
答案 2 :(得分:1)
我认为添加QDataStream作为你的类成员很好。在您所指的上下文中,运算符&gt;&gt;只接受一个参数。这是代码:
class MyClass : public QObject
{
private:
QDataStream in;
QDataStream out;
...
public:
....
struct MyStruct
{
quint8 val1;
QDataStream &operator<<(const MyStruct& _myStruct)
{
out << _myStruct.val1;
return out;
}
QDataStream &operator>>(MyStruct& _myStruct)
{
in >> _myStruct.val1;
return in;
}
};
};