Как присвоить объекту объект, возвращённый функцией-инициализатором?

Я создал класс матрицы с конструктором.
Как вернуть созданную матрицу в main из функции creatematrix()
Вот код:

#include <vector>
#include <iostream>
 
class Matrix {
private:
  size_t m_; // количество строк
  size_t n_; // количество столбцов
  std::vector<double> a_; // храним матрицу в одномерном массиве с доступом к i,j элементу как i*n_+j
public:
  // Конструктор, передаём количество строк m и количество столбцов n
  Matrix(size_t m, size_t n)
    : m_(m),
      n_(n), 
      a_(m*n) {  }
  // для внешних пользователей класса определим возможность прямого доступа к элементам
  double& operator() (size_t i, size_t j) { return a_[i*n_+j]; };
};

Matrix create_matrix(int m, int n){
  Matrix A(m,n);
    for(size_t i=0; i<m; ++i) {
        for(size_t j=0; j<n; ++j) {
            std::cin>>A(i,j);
        }
    }
 
    for(size_t i=0; i<m; ++i) {
        for(size_t j=0; j<n; ++j) {
            std::cout << A(i,j) << "\t";
        }
      std::cout << "\n";
    }
  return A; 
}
 
int main(int argc, char* argv[]) {
    int m, n;
    setlocale(LC_ALL, "Russian");
    std::cout<<"Введите колличество строк матрицы"<<std::endl;
    scanf("%d", &m);
    std::cout<<"Введите колличество столбцов матрицы"<<std::endl; 
    scanf("%d", &n);
    Matrix A1(m,n);
    A1(n,m) = create_matrix(m,n);


    
  return 0;
}



Ответы (1 шт):

Автор решения: V-Mor

Замените

A1(m,n) = create_matrix(m,n);

на

A1 = create_matrix(m,n);

Тут даже не знаю, что пояснить. Я мог бы, конечно, рассказать, что для класса Matrix не определён оператор () и, следовательно, он не вызываемый и т.д., но сдаётся мне, что автор просто имеет довольно размытые представления об ООП (см. P.P.S.), а в таком случае я оставлю свою правку без пояснений.

P.S. Мой ответ исправляет проблему, описанную автором в вопросе, но не исправляет многих других. Например, после cout всё-таки используется оператор <<, а не >>. И да, Вы не вводите m и n, а только объявляете их в данном куске кода:

std::cout>>"Введите колличество строк матрицы"<<std::endl;
size_t m;
std::cout>>"Введите колличество столбцов матрицы"<<std::endl;
size_t n;

в общем, перепишите этот ужас так:

std::cout<<"Введите колличество строк матрицы"<<std::endl;
size_t m;
cin >> m;
std::cout<<"Введите колличество столбцов матрицы"<<std::endl;
size_t n;
cin >> n;

P.P.S. Главная проблема здесь – очень слабое представление автора о том, как вообще нужно запрограммировать то, что он хочет. Да и в целом весьма слабые знания в программировании. В связи с чем советую: почитайте учебники по программированию (хорошенько так почитайте нормальные книжки, особенно по ООП, а не гляньте в пол глаза один туториал с ютубчика), а потом уже начинайте программировать и задавать вопросы сюда.

→ Ссылка