Friend Function =两个不同类的运算符重载

时间:2019-05-13 07:03:31

标签: c++ operator-overloading friend-function

我正在练习运算符重载,我已经做了一百次运算符重载,但是这一次,如果我将此代码与旧代码语法(符合要求的)进行比较,那么我的行为很烦人,我发现语法没有任何变化,请指导我。谢谢< / p>

EROR:[错误]“两个运算符=(一个,两个)”必须是非静态成员函数

 <tbody>
                        {this.state.arr.map((card)=>{
                            return(

                                <tr>
                                    <td>{card.user_name}</td>
                                    <td>{card.address}</td>
                                    <td>{card.date_of_birth}</td>
                                    <td>{card.email}</td>
                                    <td>{card.profile_picture}</td>
                                    <td><button className="btn btn-outline-primary ml-2 my-2 my-sm-0">Edit</button></td>
                                    <td><button className="btn btn-outline-primary ml-2 my-2 my-sm-0">Delete</button></td>
                                </tr>

                        ) })}
                    </tbody>

[错误]“两个运算符=(一个,两个)”必须是一个非静态成员函数

1 个答案:

答案 0 :(得分:2)

您想要的:

#include<iostream>
using namespace std;

class two;

class one{
    int sno;
  public:
    one() : sno(312) {}
    //one & operator =(const two & t);
    int getSno() const { return sno; }
};  

class two{
    int seatno;
  public:
    two() : seatno(0) {}
    two & operator = (const one & o);
    int getSeatno() const { return seatno; }
};

two & two::operator =(const one & o)
{
  seatno = o.getSno();
  return *this;
}

int main()
{
  one a1;
  two b1;

  cout << b1.getSeatno() << endl;
  b1=a1;
  cout << b1.getSeatno() << endl;
}

对于类型 T operator=的签名为T & operator(const TT &);,其中 TT 可以为 T 。< / p>

operator=不能成为其他成员,请参见https://en.cppreference.com/w/cpp/language/operators

还需要注意一个获取方法,以获取非公共属性 seatno sno

的值

编译和执行:

/tmp % g++ -pedantic -Wall -Wextra a.cc
/tmp % ./a.out
0
312