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
的运算符?
答案 0 :(得分:1)
如何在Node结构之外但在MyStruct内部重载Node的运算符?
您不能那样做。在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;
}