另一个结构内部的结构的运算符重载给出错误

时间:2019-02-27 21:17:33

标签: c++ struct compiler-errors operator-overloading

struct MyStruct {
  struct Node {
    int a;
  };
  Node operator + (const Node &A, const Node &B) {
    Node ret;
    ret.a = A.a + B.a;
    return ret;
  };
};

上面的代码给出了错误:
 ‘MyStruct::Node MyStruct::operator+(const MyStruct::Node&, const MyStruct::Node&)’ must take either zero or one argument

以下代码可以正确编译-

struct Node {
  int a;
};
Node operator + (const Node &A, const Node &B) {
  Node ret;
  ret.a = A.a + B.a;
  return ret;
};

struct MyStruct {
  struct Node {
    int a;
    Node operator + (const Node &B) {
      a += B.a;
      return *this;
    };
  };
};

如何在Node结构之外但在Node内部重载MyStruct的运算符?

1 个答案:

答案 0 :(得分:1)

  

如何在Node结构之外但在MyStruct内部重载Node的运算符?

您不能那样做。在Node外部和MyStruct内部定义的任何重载运算符都被视为MyStruct的重载运算符。这是namespacestruct不同的地方。

您可以使用:

struct MyStruct {
  struct Node {
    int a;
  };
};

MyStruct::Node operator+(MyStruct::Node const& A, MyStruct::Node const& B) {
   MyStruct::Node ret;
   ret.a = A.a + B.a;
   return ret;
}