В вашем коде есть разные ошибки:
1.- Ваш конструктор:
Matrix<T>::Matrix (const unsigned int &m, const unsigned int &n, std::vector<T> x)
Не рекомендуется передавать вектор по значению, всегда лучше передавать егопо ссылке и никогда не передавайте целое число по константной ссылке, передайте его по значению:
Matrix<T>::Matrix (unsigned int m, unsigned int n, const std::vector<T>& x)
2.- Это не ошибка, но обычно вам не нужно использовать «this->»,и лучше построить объект наподобие:
Matrix<T>::Matrix (unsigned int m0, unsigned int n0, const std::vector<T>& x0)
: m{m0}, n{n0}, x{x0} {...}
3.- Я не понимаю, почему вы делаете 2 копии одного и того же элемента: один в вашем векторе x, а другой - на M.объем памяти.Может быть, с x достаточно?
4.- Вы определяете m и n как int со знаком, но в своем конструкторе вы используете "unsigned" int.Какой из них вы хотите использовать?
Я предлагаю следующие изменения:
1.- Если вы хотите получить доступ к элементу (i, j), напишите оператор:
Matrix& operator()(unsigned int i, unsigned int j);
его легко использоватьваш вектор x.
2.- Чтобы написать все элементы, вы можете написать что-то вроде:
std::ostream& operator << (std::ostream& os, const Matrix<T>& M) {
os << "[";
for (int i = 0; i< M.rows(); ++i){
for (int j = 0; j< M.cols(); ++j){
os << M(i, j) << ' ';
}
os << '\n';
}
os << "]\n";
return os;
}
, и это не функция-друг (если вы определяете row () и cols ()).