试图将一个结构的字段复制到c中的另一个结构?

时间:2013-04-21 22:19:35

标签: c struct compiler-errors typedef

所以我在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是指向状态的指针。我需要更改当前状态的board字段以匹配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 ;
    }

1 个答案:

答案 0 :(得分:0)

宏基本上只是复制和粘贴替换。尝试替换它,看看你得到了什么代码。

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

编辑:没关系,你修复了宏

我认为问题可能是你定义结构时没有定义board的定义,所以它认为你的brd成员应该有一些其他类型的命名board。尝试切换两个typedef的顺序,看看是否有帮助。