2013-04-21 37 views
0

所以,我对于C中的连接四个游戏的代码,我现在使用的结构是:试图将一个结构的字段复制到c中的另一个结构中?

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的类型是状态,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

尝试切换两个typedefs的顺序,看看是否有帮助。 – Antimony 2013-04-21 22:42:59

回答

0

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

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

编辑:没关系,你定宏

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

+0

我已经切换了typedefs,但我仍然收到相同的错误。在那一行p_nextstate和&currentstate应该是相同的类型,我不知道为什么p_nextstate被读为char * [8] – user2305426 2013-04-22 02:22:45

+0

这很奇怪。你能发布一个展示问题的最小代码示例吗? – Antimony 2013-04-22 02:36:58

+0

这确实是错误发生的唯一线路,但如果可以有任何用处,我会发布整个主要功能。 – user2305426 2013-04-22 11:00:30

相关问题