4

2 つの整数を持つ多次元配列の値にアクセスしようとしています。配列が別のソース ファイルで宣言されています。問題のソース ファイルの先頭で extern 宣言を使用しています。

宣言されているファイルで、値にアクセスできます。ただし、同じコード行をコピーして貼り付けると、コンパイラは式が完全なオブジェクト型へのポインターでなければならないことを通知します。

私はCとポインターが初めてなので、何が起こっているのかよくわかりません。アイデアをいただければ幸いです。

extern struct piece board[8][8];


void move()
{
    
    char row;
    int column;
    int rowNumber = 0;
    printf("row: ");
    scanf("%c",&row);
    fflush(stdin);
    printf("column: ");
    scanf("%d",&column);
    column--;
    switch(row)
    {
    case 'A': rowNumber = 0; break;
    case 'B': rowNumber = 1; break;
    case 'C': rowNumber = 2; break;
    case 'D': rowNumber = 3; break;
    case 'E': rowNumber = 4; break;
    case 'F': rowNumber = 5; break;
    case 'G': rowNumber = 6; break;
    case 'H': rowNumber = 7; 
    }
    printf("\n your row is %d and column is %d",rowNumber,column);
    

     struct piece temp = &board[rowNumber][column];
    
}

および配列自体:

struct piece board[8][8] = {{{0,0,blackRook,"Rook"},{0,1,blackKnight,"Knight"},         {0,2,blackBishop,"Bishop"},{0,3,blackQueen,"Queen"},{0,4,blackKing,"King"}, {0,5,blackBishop,"Bishop"},{0,6,blackKnight,"Knight"},{0,7,blackRook,"Rook"}},
          {{1,0,blackPawn,"Pawn"}, {1,1,blackPawn,"Pawn"},{1,2,blackPawn,"Pawn"},{1,3,blackPawn,"Pawn"},{1,4,blackPawn,"Pawn"},{1,5,blackPawn,"Pawn"},{1,6,blackPawn,"Pawn"},{1,7,blackPawn,"Pawn"}},
                            {0},{0},{0},{0},


                             {{6,0,whitePawn,"Pawn"},{6,1,whitePawn,"Pawn"},{6,2,whitePawn,"Pawn"},{6,3,whitePawn,"Pawn"},{6,4,whitePawn,"Pawn"},{6,5,whitePawn,"Pawn"},{6,6,whitePawn,"Pawn"},{6,7,whitePawn,"Pawn"}},
                            {{7,0,whiteRook,"Rook"},{7,1,whiteKnight,"Knight"},{7,2,whiteBishop,"Bishop"},{7,3,whiteQueen,"Queen"},{7,4,whiteKing,"King"},{7,5,whiteBishop,"Bishop"},{7,6,whiteKnight,"Knight"},{7,7,whiteRook,"Rook"}}};

フォーマットについては申し訳ありませんが、Visual Studio の方が見栄えがします。最初の 2 つの配列と最後の 2 つの配列は構造体の断片で満たされ、残りは 0 です。空の値がコードの他の場所で問題を引き起こしているようには見えません。

編集 - ここに作品の定義があります:

struct piece
{
    int row;
    int column;
    int weight;
    char name[20];

};
4

4 に答える 4

3

&board[r][c]が型であり、型struct piece *ではないという事実とは別に、struct pieceを定義するヘッダー ファイルをインクルードする必要もありますpiece。コンパイラは、 について十分な情報がないと言っていますstruct piece

于 2012-06-11T09:45:43.937 に答える
1

あなたのエラーはここで発生すると思います:

struct piece temp = &board[rowNumber][column];

あなたは * の後の部分を忘れました

struct piece* temp = &board[rowNumber][column];

動作するはずです。

piece 構造体が定義されているヘッダーも含める必要があります。

于 2012-06-11T09:42:23.360 に答える
0

以下の行は正しくありません。tempはポインタ変数ではありません。

struct piece temp = &board[rowNumber][column]; 

配列の1つの要素へのポインタが必要な場合は、

struct piece *temp = &board[rowNumber][column]; 

2次元配列全体のポインタを作成する場合は、次のようにする必要があります。

struct piece (*temp)[][8] = &board; 
于 2012-06-11T09:37:59.543 に答える