друг с классом, но не может получить доступ к членам парламента, не занимающим официального поста

Друг функции должен смочь получить доступ к праву членов парламента, не занимающих официального поста класса? Таким образом, что я сделал неправильно здесь? Я включал свой.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;
}
10
задан starcorn 17 July 2010 в 10:19
поделиться

3 ответа

Здесь ...

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

(меня много раз кусали за задницу; определение перегрузки вашего оператора не совсем соответствует объявлению , поэтому считается, что это другая функция.)

13
ответ дан 3 December 2019 в 20:39
поделиться

Подписи не совпадают. Ваша функция, не являющаяся членом, доставляет удовольствие и веселье, а объявленный друг принимает const fun & fun.

5
ответ дан 3 December 2019 в 20:39
поделиться

Вы можете избежать подобных ошибок, написав определение функции друга внутри определения класса:

class fun
{
    //...

    friend ostream& operator<<(ostream& out, const fun& f)
    {
        out << "a= " << f.a << ", b= " << f.b << std::endl;
        return out;
    }
};

Обратной стороной является то, что каждый вызов operator << является встроенным, что может привести к раздуванию кода.

(Также обратите внимание, что параметр не может называться fun , потому что это имя уже обозначает тип.)

0
ответ дан 3 December 2019 в 20:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: