По сути, я кодирую класс Matrix, но я хочу создать его экземпляр с int[N][M]
переменными.
У меня это работает (для матрицы 3, 3):
matrix.h:
class Matrix {
private:
unsigned cols, rows;
int* data;
public:
Matrix(unsigned cols, unsigned row);
Matrix(int mat[3][3]);
}
matrix. cpp:
inline
Matrix::Matrix(unsigned cols, unsigned rows) : cols (cols), rows (rows) {
if (rows == 0 || cols == 0) {
throw std::out_of_range("Matrix constructor has 0 size");
}
data = new int[rows * cols];
}
Matrix::Matrix(int mat[3][3]) : Matrix(3, 3) {
for(unsigned row = 0; row < rows; row++) {
for(unsigned col = 0; col < cols; col++) {
(*this)(col, row) = mat[col][row];
}
}
}
Затем я попытался реализовать конструктор шаблона:
template<int N, int M>
Matrix(int[N][M]) : Matrix(N, M) {
for(unsigned row = 0; row < rows; row++) {
for(unsigned col = 0; col < cols; col++) {
(*this)(col, row) = mat[col][row];
}
}
}
, который, кажется, компилируется, но когда я выполнить тестовую функцию:
void test() {
int tab[3][3] = {
{1,2,3},
{4,5,6},
{7,8,9}
};
Matrix mat(tab);
}
Я получаю эту ошибку:
matrix.cpp:10:19: error: no matching function for call to ‘Matrix::Matrix(int [3][3])’
Matrix mat(tab);
, даже если я шаблонирую ее таким образом (в файле .h в классе Matrix):
template<> Matrix::Matrix<3, 3>(int[3][3]);
Я мог бы действительно использовать некоторую помощь по этому вопросу, а также о том, как создать экземпляр для каждой комбинации int от 0 до 10
.