Я пытаюсь построить класс, который работает с матрицами ширины. В своем конструкторе он хочет знать высоту и ширину массива и хочет сам массив, а затем должен иметь возможность печатать массив и перегружать некоторые операторы. Массив должен быть массивом поплавков. Это то, что я до сих пор: Два определенные параметры:Работа с многомерными массивами
#define HEIGHT 3
#define WIDTH 3
Making массив:
void Assignment_1::start(){
float **matrix = new float *[HEIGHT];
for (int i = 0; i < HEIGHT; i++){
matrix[i] = new float[WIDTH];
}
// 5 6 11
// 7 2 8
// 5 1 4
matrix[0][0]=5;
matrix[0][1]=6;
matrix[0][2]=11;
matrix[1][0]=7;
matrix[1][1]=2;
matrix[1][2]=8;
matrix[2][0]=5;
matrix[2][1]=1;
matrix[2][2]=4;
Matrix * matrixA = new Matrix(HEIGHT,WIDTH,matrix);
matrixA->printMatrix();
}
Сейчас я понимаю, что C++ двумерный массив а существует нормального массива HEIGHT указателей , каждый из которых указывает на массив размера WIDTH.
Конструктор и глобальные вары:
Matrix::Matrix(int width, int height, float **array){
this->height = height;
this->width = width;
this->array = array;
}
//in Matrix.h:
int width, height;
float ** array;
До этого момента все в порядке. Теперь я хочу, чтобы на самом деле использовать массив, напечатав его:
void Matrix::printMatrix(){
for (int h = 0; h < height; h++){
for (int w = 0; w < width;w++){
std::cout <<array[height][width]<<" ";
}
std::cout << std::endl;
}
}
И это, где это идет не так: программа просто вылетает. Я почему-то понимаю, почему он сбой: я думаю, мне нужно получить, какой массив [h] указывает на (который представляет собой массив с плавающей точкой ширины), но попытка сделать это дает мне ошибку: невозможно преобразовать float * в float [] *. Что мне нужно сделать?
массива [высота] [ширина] -> массив [ч] [ш]. Кроме того, std :: vector. Кроме того, boost.multiarray. Также https://gist.github.com/rmartinho/3959961 –
Ох. Опечатка. После того, как я полностью пойму многомерный массив, я буду смотреть в векторы, но Im все еще учится, поэтому я не хочу спешить с шаблонами, пока не узнаю основы. – Cheiron
std :: vector * is * основы. Ручное управление памятью - это передовой материал. –