Как присвоить объекту объект, возвращённый функцией-инициализатором?
Я создал класс матрицы с конструктором.
Как вернуть созданную матрицу в 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 шт):
Замените
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. Главная проблема здесь – очень слабое представление автора о том, как вообще нужно запрограммировать то, что он хочет. Да и в целом весьма слабые знания в программировании. В связи с чем советую: почитайте учебники по программированию (хорошенько так почитайте нормальные книжки, особенно по ООП, а не гляньте в пол глаза один туториал с ютубчика), а потом уже начинайте программировать и задавать вопросы сюда.