Почему визуал студия ругается на то, что не найден нужный оператор, хотя для него есть нужная перегрузка
Я написал структуру, которая создаёт матрицу с помощью двухмерного динамического массива и написал перегрузку для операторов + ,- ,* , =, <<, но почему-то при их использовании выдаёт ошибку, мол отсутствует оператор, соответствующий этим операндам.
Matrix Matrix::operator*(Matrix& a)
{
Matrix result(this->rows, a.columns);
for (unsigned i{}; i < this->rows; i++)
{
for (unsigned j{}; j < a.columns; j++)
{
for (unsigned z{}; z < this->columns; z++)
{
result[i][z] += *this[i][j] * a[j][z];
}
}
}
return result;
}
Matrix& Matrix::operator=(Matrix& a)
{
for (unsigned i{}; i < rows; i++)
{
for (unsigned j{}; j < columns; j++)
{
matrix[i][j] = a[i][j];
}
}
return *this;
}
std::ostream& operator<<(std::ostream& stream, Matrix& matx)
{
std::string result;
for (unsigned i{}; i < matx.rows; i++)
{
result += '\n';
for (unsigned j{}; j < matx.columns; j++)
{
result += std::to_string(matx.matrix[i][j]) + '\t';
}
}
return stream << result;
}
int main()
{
Matrix A(2, 2);
Matrix B(2, 3);
Matrix C(2, 2);
C = A * B; // выдаёт ошибку о ненайденном операторе
cout << A * B << endl; // выдаёт ошибку о ненайденном операторе
C = A; // всё работает хорошо
cout << C << endl; // всё работает хорошо
}
С чем это может быть связано?
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Смотрим на
Matrix& Matrix::operator=(Matrix& a)
Где вы видите справа, в C = A*B
lvalue? Там у вас возвращается вовсе даже не ссылка:
Matrix Matrix::operator*(Matrix& a)
Так что надо оператору присваивания передавать
Matrix& Matrix::operator=(const Matrix& a)
Или вы в будущем планируете его изменить, и изменять не только то, чему присваиваете, но и то, что присваиваете, и потому такая сигнатура?