Перегрузить оператор вставки потока для вложенных структур / классов - PullRequest
0 голосов
/ 28 сентября 2018

Я хочу перегрузить оператор вставки потока для структуры, вложенной в класс.Как я могу исправить эту ошибку и заставить функцию работать, или есть какой-то альтернативный метод для ее реализации?

struct S {
    int a;
    int b;
};

class T {
private:
    S** arrayName;
    int r;
    int c;

public:
    friend ostream& operator << (ostream& _os, const T& _t) {
        for (int i = 0; i < _t.r; i++) {
            for (int j = 0; j < _t.c; j++) {
                _os << _t.arrayName[i][j];
            }
        }
        return _os;
    }
}

1 Ответ

0 голосов
/ 28 сентября 2018

Если бы arrayName был просто целочисленным массивом в class T, например:

int arrayName [4][4]; //for example

, текущая реализация будет работать.Но поскольку arrayName является указателем на указатель на struct S и действует как двумерный массив struct S, вам потребуется перегрузить оператор << в struct S, чтобы иметь возможность печатать его элементы a и b.

Так что ваш struct S теперь должен быть:

struct S {
    int a;
    int b;
    friend ostream& operator<<(ostream& _os, const S& _s) { 
        _os << _s.a << ' ' << _s.b << endl; 
        return _os; 
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...