Друг функции должен смочь получить доступ к праву членов парламента, не занимающих официального поста класса? Таким образом, что я сделал неправильно здесь? Я включал свой.h файл с оператором <<я намерение оказать поддержку с классом.
#include <iostream>
using namespace std;
class fun
{
private:
int a;
int b;
int c;
public:
fun(int a, int b);
void my_swap();
int a_func();
void print();
friend ostream& operator<<(ostream& out, const fun& fun);
};
ostream& operator<<(ostream& out, fun& fun)
{
out << "a= " << fun.a << ", b= " << fun.b << std::endl;
return out;
}
Здесь ...
ostream& operator<<(ostream& out, fun& fun)
{
out << "a= " << fun.a << ", b= " << fun.b << std::endl;
return out;
}
вам понадобится
ostream& operator<<(ostream& out, const fun& fun)
{
out << "a= " << fun.a << ", b= " << fun.b << std::endl;
return out;
}
(меня много раз кусали за задницу; определение перегрузки вашего оператора не совсем соответствует объявлению , поэтому считается, что это другая функция.)
Подписи не совпадают. Ваша функция, не являющаяся членом, доставляет удовольствие и веселье, а объявленный друг принимает const fun & fun.
Вы можете избежать подобных ошибок, написав определение функции друга внутри определения класса:
class fun
{
//...
friend ostream& operator<<(ostream& out, const fun& f)
{
out << "a= " << f.a << ", b= " << f.b << std::endl;
return out;
}
};
Обратной стороной является то, что каждый вызов operator <<
является встроенным, что может привести к раздуванию кода.
(Также обратите внимание, что параметр не может называться fun
, потому что это имя уже обозначает тип.)