我们有以下内容: (pseudoish)
class MyClass
{
private:
struct MyStruct{
MyStruct operator=(const MyOtherStruct& rhs);
int am1;
int am2;
};
};
我们想要重载MyClass.cpp中的=
运算符来执行以下操作:
MyStruct&
MyStruct::operator=(const MyOtherStruct& rhs)
{
am1 = rhs.am1;
am2 = rhs.am2;
}
但是,它不想编译。我们收到的错误类似于
“缺失;之前&”
和
“如果后跟::”
,则MyStruct必须是类或命名空间
这里有一些概念我不知道吗?
答案 0 :(得分:2)
语法是
MyStruct& operator=(const MyOtherStruct& rhs) {
// assignment logic goes here
return *this;
}
直接位于MyStruct
正文中的运算符。另请注意,我添加了惯用语return *this
,让赋值返回对此对象的引用。
编辑以回应OP编辑问题。 您还可以在正文中声明运算符,并在其他位置定义它。在这种情况下,语法为:
MyClass::MyStruct& MyClass::MyStruct::operator=(const MyOtherStruct& rhs) {
// assignment logic goes here
return *this;
}
答案 1 :(得分:2)
您需要将operator=
MyStruct
移动到结构声明正文中:
class MyClass
{
private:
struct MyStruct{
int am1;
int am2;
MyStruct& operator=(const MyOtherStruct& rhs)
{
am1 = rhs.am1;
am2 = rhs.am2;
return *this;
}
};
};
或者如果那是不可能的,因为MyOtherStruct
不完整或者不想弄乱类声明:
class MyClass
{
private:
struct MyStruct{
int am1;
int am2;
MyStruct& operator=(const MyOtherStruct& rhs);
};
};
inline MyClass::MyStruct& MyClass::MyStruct::operator=(const MyOtherStruct& rhs)
{
am1 = rhs.am1;
am2 = rhs.am2;
return *this;
}