@Urilobus

Как правильно оформить присваивание значения возвращаемого из функции C++?

Создал класс матриц в С++, есть конструктор копирования:
Matrix (Matrix &Mat)
{
    this->cols_num = Mat.cols_num;
    this->rows_num = Mat.rows_num;
    Mat_1 = new double*[Mat.cols_num];
    for (int i = 0; i < Mat.cols_num; i++)
    {
        Mat_1[i] = new double[Mat.rows_num];
        for (int j = 0; j < Mat.rows_num; j++) Mat_1[i][j] = Mat(i,j);
    } 
    std::cout<<"Копирование "<<this<<std::endl;
}

Оператор присваивания:
Matrix& operator = (Matrix& Mat)
    {
        double **Mat_copy;
        this->cols_num = Mat.cols_num;
        this->rows_num = Mat.rows_num;
        Mat_copy = new double*[Mat.cols_num];
        for (int i = 0; i < Mat.cols_num; i++)
        {
            Mat_copy[i] = new double[Mat.rows_num];
            for (int j = 0; j < Mat.rows_num; j++) Mat_copy[i][j] = Mat(i,j);
        }
        Mat_1 = Mat_copy;
        return *this;
    }

И функция транспонирования
Matrix Transpose(Matrix &Mat)
{
    Matrix Mat_trans(Mat.cols_num, Mat.rows_num); 
    for(int i = 0; i < Mat_trans.cols_num; i++)
        for (int j = 0; j < Mat_trans.rows_num; j++)
            Mat_trans(i,j) = Mat(j,i); 
    return Mat_trans;    
}


Простое присваивание типа Mat1 = Mat2, работает корректно, но при попытке присвоить значение возвращаемое функцией транспонирования Mat1 = Transpose(Mat2) возникает ошибка (no operator "=" matches these operands)
Как правильно вытащить транспонированную матрицу из функции Transpose?
  • Вопрос задан
  • 141 просмотр
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Потому что аргументы должны быть const Matrix&.

Возвращаемое функцией значение является временным значением. В него нельзя писать, но его можно читать. Оно const. И его нельзя передавать в описанный вами оператор копирования.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы