Функция Friend = Перегрузка оператора двух разных классов - PullRequest
2 голосов
/ 13 мая 2019

Я практикую перегрузку операторов, я сотню раз перегружал операторы, но на этот раз его поведение раздражает, если я сравниваю этот код со старым синтаксисом кода (что хорошо), я не нахожу никаких изменений в синтаксисе, пожалуйста, помогите мне. Спасибо

ОШИБКА: [Ошибка] 'два оператора = (один, два)' должна быть нестатической функцией-членом

#include<iostream>
using namespace std;
class two;
class one{
    int sno;
    public:
        one()
        {
            sno=312;
        }

    friend two operator =(one,two);
};  
    //b b1; b1=a.seatno;
class two{
    int seatno;
    public:
        two(){seatno=0;
        }
        friend two operator = (one,two);

};

    two operator = (one a1,two b1)
    {
        b1.seatno=a1.sno;
        return b1;
    }
int main()
{
    one a1;
    two b1;
    b1=a1;
}

[Ошибка] 'two operator = (one, two)' должна быть нестатической функцией-членом

1 Ответ

2 голосов
/ 13 мая 2019

Вы хотите, чтобы:

#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 .

operator=, как и некоторые другие, не может быть нечленом, см. https://en.cppreference.com/w/cpp/language/operators.

Обратите внимание, что для получения значения необязательных атрибутов необходимо также получить seatno и sno

Компиляция и исполнение:

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