在类中重载operator = for structs

时间:2013-10-03 23:01:22

标签: c++ struct operator-overloading

我们有以下内容: (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必须是类或命名空间

这里有一些概念我不知道吗?

2 个答案:

答案 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;
}