我正在尝试构建一个工作宽度矩阵的类。在它的构造函数中,它想知道数组的高度和宽度,它想要数组本身,然后它必须能够打印数组并重载一些运算符。 Array必须是浮点数组。这是我到目前为止: 两个定义的参数:
#define HEIGHT 3
#define WIDTH 3
制作阵列:
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 [] *。我需要做什么?
答案 0 :(得分:3)
The robot already answered your question:
for (int h = 0; h < height; h++){
for (int w = 0; w < width;w++){
std::cout <<array[height][width]<<" ";
// ^^^^^^ ^^^^^
}
std::cout << std::endl;
}
您正在访问哪些条目?好吧,总是array[height][width]
。但是,array
仅包含height
个元素,因此此访问会导致未定义的行为。只需应用循环变量h
和w
:
for (int h = 0; h < height; h++){
for (int w = 0; w < width;w++){
std::cout << array[h][w]<<" ";
}
std::cout << std::endl;
}
但是,这仍远非最佳。您应该使用更易于使用的类型,例如std::vector
:
typedef std::vector<float> float_vector;
typedef std::vector<float_vector> float_matrix;
float_matrix matrix(HEIGHT,float_vector(WIDTH));
std::vector
是最重要的类型之一。掌握它。
答案 1 :(得分:1)
这是因为二维数组和指针指针不相同。你能试试吗
浮动**数组浮动(*数组)[大小]?
并将array [height] [width]更改为array [h] [w]
答案 2 :(得分:1)
void Matrix::printMatrix(){
for (int h = 0; h < height; h++){
for (int w = 0; w < width;w++){
std::cout <<array[h][w]<<" ";
}
std::cout << std::endl;
}
}
不是高度和宽度 - 它是数组的大小,使用迭代器h,w