Если вы хотите перегрузить ostream operator<<
для вашего класса, вам нужно использовать функцию друга или функцию, не являющуюся членом, потому что объект ostream
появляется в левой части выражения (оно написанокак os << my_matrix
).
std::ostream& operator<<(std::ostream& os, const Matrix& matrix) { /* ... */ }
Это выглядит как будто вы пытаетесь реализовать его как функцию-член, но на самом деле это должно выглядеть так:
std::ostream& Matrix::operator<<(const Matrix& matrix) { /* ... */ }
Это не будет работать, потому что при реализации перегрузки оператора в качестве функции-члена тип объекта в левой части выражения совпадает с типом класса, членом которого является перегрузка (поэтомув этом случае вам придется написать my_matrix1 << my_matrix2
, что вам не нужно).
Внутри перегрузки вы не должны писать в cout
напрямую;Вы должны записать объект ostream
, который передается в качестве аргумента функции.