簡體   English   中英

試圖將一個結構的字段復制到C中的另一個結構?

[英]Trying to copy a field of one struct to another struct in c?

因此,我在C中有一個Connect Four游戲的代碼。我現在使用的結構是:

typedef struct {int value; board brd; } state ;
typedef char board[8][8] ;
#define BOARD(p_S) (((state *) (p_S)->brd)

而且我正在嘗試編譯main函數,但在此行上不斷出現錯誤:

BOARD(&currentstate) = BOARD(p_nextstate) ;

其中currentstate的類型是state,而p_nextstate是指向狀態的指針。 我需要更改當前狀態的板字段以匹配p_nextstate的板字段,但是在編譯時出現此錯誤:

error: incompatible types when assigning to type "board" from type "char(*)[8]"

完整的代碼很想放在這里,我想我已經包含了所有相關行,但如果沒有,我會添加它們。 是否有更改此行的正確方法? 任何幫助表示贊賞。 編輯:缺少括號是我的錯誤,這是在代碼中,但我在這里鍵入錯誤。 現在已固定,以匹配代碼。 這是完整的主要功能:

    int main( int argc, char * argv[]){

  tree T ;
  state currentstate, *p_nextstate ;
  int depth ;

  initialize_board(BOARD(&currentstate)) ;
  do{
    printf("Enter game tree depth: ") ;
    scanf("%d", &depth) ;
  }while(depth < 1) ;
  print_board(BOARD(&currentstate)) ;

  while(get_move(BOARD(&currentstate), PLAYER) != 0){
    print_board(BOARD(&currentstate)) ;
    if(have_winner(BOARD(&currentstate)) == TRUE){
      printf("You win.\n") ;
      exit(0) ;
    }

    printf("Calculating my move...\n") ;
    init_tree(&T) ;
    if(make_state_root(&T, currentstate, NULL, NULL) == ERROR){
      printf("Memory Allocation error in move().\n") ;
      exit(-1) ;
    }

    printf("Board is now:\n") ;
    print_board(BOARD(p_nextstate)) ;
    printf("Minimax value is %d\n", VALUE(p_nextstate)) ;
    if(have_winner(BOARD(p_nextstate)) == TRUE){
      printf("I win.\n") ;
      exit(0) ;
    } else if (VALUE(p_nextstate) == WIN){
    printf("I concede.\n") ;
    exit(0) ;
       }
     BOARD(&currentstate)  =  BOARD(p_nextstate) ;
     destroy_tree(&T, free) ;
   }

   return 0 ;
    }

宏基本上只是復制和粘貼替換。 嘗試替換它,看看得到什么代碼。

((state *) (&currentstate)->brd) = ((state *) (p_nextstate)->brd);

編輯:沒關系,您修復了宏

我認為問題可能是您在定義結構時未定義board定義,因此它認為您的brd成員應該具有其他一些名為board類型。 嘗試切換兩個typedef的順序,看看是否有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM