2013-04-21 2 views
0

그래서 내가 지금 사용하고 구조체는 C.에 연결되는 4 개의 게임에 대한 코드가 있습니다 :하나의 구조체 필드를 다른 구조체에 복사하려고합니까?

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 ; 
    } 
+0

두 typedef의 순서를 바꾸어보고 도움이되는지 확인해보십시오. – Antimony

답변

0

매크로는 기본적으로 복사하여 붙여 넣기를 대체합니다. 그것을 대체하여 얻은 코드를 확인하십시오.

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

편집 : 신경 끄시 고, 당신은이

나는 문제가 board의 당신의 정의는 당신이 당신의 구조체를 정의 점에서 정의되지 않았 음을 것 같아요 매크로 고정, 그래서 생각하는 당신의 brd 회원 board이라는 다른 유형이 있어야합니다. 두 typedef의 순서를 바꾸고 도움이되는지 확인하십시오.

+0

typedef를 바꿨지만 여전히 같은 오류가 발생합니다. 그 라인에서 p_nextstate와 currentstate는 같은 타입이어야합니다. p_nextstate가 char * [8]로 읽히는 이유를 알 수 없습니다. – user2305426

+0

그건 아주 이상합니다. 문제를 보여주는 최소한의 코드 예제를 게시 할 수 있습니까? – Antimony

+0

그게 정말 유일한 줄이었다 오류가 발생했지만 모든 주요 기능을 사용할 수있는 경우 게시합니다. – user2305426

관련 문제