С вашим непосредственным вопросом:
mat
представляется локальной переменной в вашем конструкторе, а не членом класса
i
и j
- локальные переменные, объявленные в fill()
, но не determinant()
Есть и другие важные проблемы:
Ваша матрица не инициализируется rows
или columns
. Они будут иметь любое случайное значение, и, учитывая, что они являются целыми числами со знаком, могут даже быть отрицательными. Ваш конструктор вполне может выбросить bad_alloc
заполнить чем?
Это неправильная формула для получения определителя, которая в любом случае применима только к квадратным матрицам
Было бы лучше использовать вектор, а не массивы и только один вектор. Посмотрите C ++ FAQ , чтобы увидеть самый простой способ сделать матрицу.
Предполагая, что вы хотите, чтобы это была матрица типа int, а не double, объявите "mat" следующим образом:
std::vector<int> mat;
Ваш конструктор должен выглядеть примерно так:
matrix::matrix (int r,int c) :
rows(r), columns(c), mat(r*c)
{
//body
}
Оператор перегрузки [], таким образом:
int* operator[](int r)
{
return &mat[r*columns];
}
const int* operator[](int r) const
{
return &mat[r*columns];
}
Обратите внимание, у нас есть 2 из них. Возможно реализовать одно с точки зрения другого. Некоторым также нравится перегружать operator (), чтобы получить 2 параметра, строку и столбец, но вышеприведенное сработает.
Вы можете предпочесть использовать size_t вместо int для измерений.