그래서 내가 지금 사용하고 구조체는 C.에 연결되는 4 개의 게임에 대한 코드가 있습니다 :하나의 구조체 필드를 다른 구조체에 복사하려고합니까?
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의 유형은 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(¤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 ;
}
두 typedef의 순서를 바꾸어보고 도움이되는지 확인해보십시오. – Antimony