【问题标题】:expression must be a pointer to a complete object type表达式必须是指向完整对象类型的指针
【发布时间】:2012-06-14 04:59:39
【问题描述】:

我正在尝试使用两个整数访问多维数组的值。该数组在另一个源文件中声明。 我在问题源文件的顶部使用了外部声明。

在声明它的文件中,我可以访问这些值。 但是,当我复制并粘贴同一行代码时,编译器会通知我表达式必须是指向完整对象类型的指针。

我是 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 中看起来更好。 前两个和后两个数组都填充了结构体 - 其余为 0。 空值似乎不会在我的代码中的其他任何地方造成任何问题。

编辑 - 这是作品定义:

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

};

【问题讨论】:

  • 添加piece结构的定义。

标签: c pointers multidimensional-array


【解决方案1】:

以下行不正确。 temp 根本不是指针变量。

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

如果你只想要一个指向数组元素的指针,那么

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

如果要为整个二维数组创建一个指针,那么应该是

struct piece (*temp)[][8] = &board; 

【讨论】:

    【解决方案2】:

    我猜你的错误发生在这里:

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

    你忘了*后面的部分

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

    应该可以。

    您还应该包含定义片段结构的标题。

    【讨论】:

      【解决方案3】:

      除了&board[r][c] 的类型是struct piece * 而不是struct piece,您还需要包含定义piece 的头文件。编译器告诉您它没有足够的关于 struct piece 的信息。

      【讨论】:

      • 谢谢。像往常一样,我现在觉得很傻。我也开始怀念javas虚拟机了。
      【解决方案4】:

      Extern 还不够,还必须包含声明结构的 .h。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-02
        • 1970-01-01
        • 1970-01-01
        • 2023-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-19
        相关资源
        最近更新 更多