Вы объявляете два конструктора:
Matrix();
Matrix(int rowSize, int colSize);
Но вы определяете только один:
Matrix::Matrix(int rowSize, int colSize)
{
this->rowSize=rowSize;
this->colSize=colSize;
allocate_data();
for(int i=0; i<rowSize; i++)
{
for(int j=0; j<colSize; j++)
{
p[i][j]=0;
}
}
}
Кроме того, в main
вы вызываете конструктор, который вы случайно не определили:
Matrix m;
Вместо этого избавьтесь от объявления для Matrix::Matrix()
, так как у вас нет определения, и используйте конструктор, который принимает два Аргументы:
int main()
{
int rowSize;
int colSize;
cout<<"Enter size of rows and columns: ";
cout<<"Rows: ";
cin>>rowSize;
cout<<"Cols: ";
cin>>colSize;
Matrix m(rowSize, colSize);
m.printMatrix(rowSize,colSize);
return 0;
}
Дополнительные улучшения
Вам не нужно передавать размер матрицы в Matrix::printMatrix
, так как матрица уже имеет размер в качестве членов. Передав эти параметры в printMatrix, you're making the class more confusion and error-prone to use. If I constructed a 3x3 matrix and tried to call
printMatrix (10,10) `на нем, я, безусловно, вызову неопределенное поведение и, скорее всего, выполню sh программу.
Избавимся от параметров (как в определении, так и в объявлении). ) и использовать существующие поля rowSize
и columnSize
для управления циклами в этой функции. Тип возвращаемого значения также должен быть void
.
Кроме того, 0 >> matrix[i][j];
не имеет смысла. Правильный синтаксис: matrix[i][j] = 0;
.