0

C で Connect Four ゲームのコードを作成しました。現在使用している構造体は次のとおりです。

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

メイン関数をコンパイルしようとしていますが、次の行で継続的にエラーが発生します。

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 ;
    }
4

1 に答える 1

0

マクロは、基本的にコピー アンド ペーストによる置換です。それを置き換えてみて、得られるコードを確認してください。

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

編集:気にしないで、マクロを修正しました

board問題は、構造体を定義した時点で の定義が定義されていなかったため、brdメンバーには という名前の他の型が必要であると考えられている可能性があると思いますboard。2 つの typedef の順序を入れ替えてみて、それが役立つかどうかを確認してください。

于 2013-04-21T22:22:31.453 に答える