过载运算符<<和>>在c ++结构中

时间:2013-07-17 07:02:46

标签: c++ overloading operator-keyword

我在类中有一个类和一个结构:

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;
       }
    };
};

但是不行

3 个答案:

答案 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;
       }
    };
};