所以,我對於C中的連接四個遊戲的代碼,我現在使用的結構是:試圖將一個結構的字段複製到c中的另一個結構中?
typedef struct {int value; board brd; } state ;
typedef char board[8][8] ;
#define BOARD(p_S) (((state *) (p_S)->brd)
而且我試圖編譯的主要功能,但我在這條線不斷得到一個錯誤:
BOARD(¤tstate) = BOARD(p_nextstate) ;
其中currentstate的類型是狀態,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(¤tstate)) ;
do{
printf("Enter game tree depth: ") ;
scanf("%d", &depth) ;
}while(depth < 1) ;
print_board(BOARD(¤tstate)) ;
while(get_move(BOARD(¤tstate), PLAYER) != 0){
print_board(BOARD(¤tstate)) ;
if(have_winner(BOARD(¤tstate)) == 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(¤tstate) = BOARD(p_nextstate) ;
destroy_tree(&T, free) ;
}
return 0 ;
}
嘗試切換兩個typedefs的順序,看看是否有幫助。 – Antimony 2013-04-21 22:42:59