0

幅行列を機能させるクラスを構築しようとしています。そのコンストラクターでは、配列の高さと幅を知りたいと思っており、配列自体が必要なため、配列を出力していくつかの演算子をオーバーロードできる必要があります。Array は float の配列でなければなりません。これは私がこれまでに持っているものです: 2 つの定義済みパラメーター:

#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++ の 2 次元配列には 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;
    }
}

そして、ここで問題が発生します。プログラムは単純にクラッシュします。クラッシュする理由はちょっとわかります: array[h] が指しているもの (サイズ幅の float 配列) を取得する必要があると思いますが、それをしようとするとエラーが発生します: float* を float[] に変換できません*。私は何をする必要がありますか?

4

3 に答える 3

3

ロボットはすでにあなたの質問に答えました:

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つです。それをマスターします。

于 2013-02-25T11:31:35.000 に答える
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

于 2013-02-25T11:32:43.643 に答える
1

これは、2次元配列とポインタからポインタが同じではないためです。やってみませんか

float ** array to float(* array)[size]?

array[height][width]をarray[h][w]に変更します

于 2013-02-25T11:31:00.450 に答える