12

そこで、グリッドメンバー変数Parentを持つ親クラスを作成しました。グリッド変数は、メンバー変数Square*を含む正方形の大きな配列へのポインターです。key(このプロジェクトをハッシュテーブルと考えてください)問題は、配列Parent内のキー変数を編集する関数をクラスで作成していて、エラーが発生することです。Squareこのコード行は次のようにコンパイルされます。

this->grid = new Square[row*col];

しかし、この行はコンパイルされません:

this->grid[i*col + j]->key1 = j;

それは下線を引きthis、式はポインタ型でなければならないと言っています。誰かが私が間違っているかもしれないことについての考えを持っているかどうか疑問に思いましたか?

void Parent::initialize(int row,int col) {
    this->grid = new Square[row*col];
    for(int i = 0; i < row; i++) {
        for(int j = 0;j < col; j++) {
            this->grid[i*col + j]->key1 = j;
            this->grid[i*col + j]->key2 = i;
        }
    }
4

2 に答える 2

16

あなたは使用する必要があります

this->grid[i*col + j].key1
this->grid[i*col + j].key2

これは、グリッドがポインタであることが事実である場合でも、そのメモリによってSquareオブジェクトの配列がポイントされるように割り当てているためです。したがって、[]演算子を使用すると、ではなくタイプのオブジェクトを取得し、オブジェクトに対してはをSquare使用する必要があります。->演算子ではなく演算子。Square*Square

于 2012-10-27T21:18:54.443 に答える
4

タイプはthis->gridタイプ Square*なので、タイプであり、からメンバーにアクセスするには、(矢印)ではなく(ドット)を使用する必要があります。式に矢印を使用するには、式にポインタ型が必要です...this->grid[0]Square&.->Square&

this->grid[i*col + j]->key2
//                   ^^: this->grid[i*col + j] is not a pointer 
this->grid[i*col + j].key2
//                   ^ use dot to access key2 and key1 too
于 2012-10-27T21:12:31.730 に答える