Перегрузка оператора структуры внутри другой структуры дает ошибку - PullRequest
0 голосов
/ 28 февраля 2019
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 голосов
/ 28 февраля 2019

Как я могу перегрузить оператор Node вне структуры Node, но внутри MyStruct?

Вы не можете этого сделать.Любые операторы перегрузки, определенные вне Node и внутри MyStruct, рассматриваются как оператор перегрузки MyStruct.Вот где namespace отличается от struct.

. Вы можете использовать:

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