0

この問題は、前の問題の続きです。

C++ 2D 配列オブジェクトを返し、挿入する

以下の内容を理解するために、リンクを表示することを強くお勧めします。

Adam Rosenfield の回答をたどり、最初の 2 つの問題を解決しました。しかし、最初の 2 つの高さに関係する最後の問題はまだ解決されていません。問題がコードを正そうとする方法にあるのか、それとも試みていることに問題があるのか​​ どうかはわかりません。

これは int main() に書かれている内容の一部です:

    int i, j;

    Grid myGrid;
    Piece myPiece;

    //First two lines of Adam's Code
    int (*arrayPtr)[4][4] = myPiece.returnPiece();
    int cell = (*arrayPtr)[i][j];

    //compiler error
    myGrid.insertArray(cell); <--- Problem

議論が間違っているのか、それとも私が試みていることが間違っているのか、私にはわかりません。これは、コンパイルしようとしたときに受け取るものです。

関数「int main()」内
「int」から「int(*)[4][4]」への無効な変換
「void Grid::insertArray(int(*)[4][4])」の引数 1 を初期化しています
[ビルド エラー] [グリッド test.o] エラー 1

私はこれらを試しました:

myGrid.insertArray((*arrayPtr)[4][4]); //同じエラー
myGrid.insertArray((*arrayPtr)[i][j]); //同じエラー

何が問題なのかわからず、何をすべきかわかりません。前の問題を手伝ってくれたアダムと他の人に感謝しますが、この最後の問題を解決する方法を知っている人はいますか?

"returnpiece() を insertArray() の引数に受け入れさせる。

4

2 に答える 2

1
int i, j;

Grid myGrid;
Piece myPiece;

//First two lines of Adam's Code
int (*arrayPtr)[4][4] = myPiece.returnPiece();
int cell = (*arrayPtr)[i][j];

//compiler error
myGrid.insertArray(cell); <--- Problem

ピース(または4x4セクション)をコピーする場合は、そのセクションへのポインターを渡す必要があります。Adamが提供した関数は、整数ではなく、型(int * [4] [4])の引数を取ります。

 void Grid::InsertArray(int (*arr)[4][4]) {
      for(int i = 0; i < x_ROWS; i++)
      {
          for(int j = 0; j < y_COLUMNS ; j++)
              squares[i][j] = (*arr)[i][j];
      } 
 }

したがって、arrayPtrを渡します

int i, j;

 Grid myGrid;
 Piece myPiece;

 //First two lines of Adam's Code
 int (*arrayPtr)[4][4] = myPiece.returnPiece();
 myGrid.insertArray(arrayPtr); 

または一行で

myGrid.insertArray(myPiece.returnPiece());
于 2009-01-05T16:35:51.180 に答える
0

いくつかの問題があります。

1) すべてをカット アンド ペーストしていない可能性がありますが、i と j が値を持つ前に設定cellしているようです(*arrayPtr)[i][j]。C/C++ では、それらは自動的に 0 に初期化されず、値は何でもかまいません。 (以前にその場所でたまたまメモリにあったものは何でも、ばかげて高い/低い数値になることがよくあります)。

2) insertArray 関数の目的は、配列を取得して別の配列に挿入することです。したがって、配列を渡す必要があります。cell代わりに、配列の単一要素であるit を渡します。あなたはarrayPtrそれ自体を与えたいです。Adam のコードの最初の行では、[4][4] は配列の型の一部です (具体的には 4x4 配列であることを指定しています)。ただしmyGrid.insertArray((*arrayPtr)[4][4]);、「arrayPtr の 4 行目と 4 列目の要素を取得する」という意味です。変数宣言の外側では、[4][4] が要素の実際のルックアップを実行します。異なる文脈、異なる意味。

3) スタイル ノート: あなたの最後の投稿を見ると、insertArray のコードは、この単語が通常プログラミングで使用されるという意味で「挿入」を実行しません。挿入とは、以前に存在していた要素を消去せずに、要素をシーケンス (配列やリンク リストなど) に追加することです。コードはコピーを実行するため、copyArray または setArray は誤解を招く可能性が低くなります。

于 2009-01-02T01:40:06.163 に答える