c++ - 在 C++ 结构中重载运算符 << 和 >>

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

但是不行

最佳答案

您需要将运算符声明为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;
       }

关于c++ - 在 C++ 结构中重载运算符 << 和 >>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17693262/

相关文章:

java - 为什么 Scala 编译器更喜欢将值为 null 的参数推断为 Array[Char] 而不是 Object?

C# 在类外重载运算符==

c++ - 如何创建一个可以初始化 C++ 数据类型的类?

C++ 奇怪的访问冲突 Visual Studio 2015 RC

c++ - Python 等效于 C++ getline()

c# - 具有通用和多个参数的方法

Java >>>= 运算符

c++ - Robai Cyton Joint Velocity 使用 Actions API

c++ - 类没有合适的运算符->

c++ - 使用 list<Object*> C++ 的迭代器编译器错误