我正在用c编写游戏,我想在每一步都改变玩家。所以我创建了我的功能来做到这一点。
struct Node{
char player[4];
int cubesRemaining;
struct Node *left;
struct Node *right;
};
char *switchPlayer(struct Node *n){
if (strcmp(n->player, "MAX") == 0){
strcpy(n->player, "MIN");
return (n->player);
}
else{
strcpy(n->player, "MAX");
return (n->player);
}
}
现在我想构建游戏树,然后使用递归创建另一个函数。我也使用switchplayer功能,但我收到一条错误信息。这是我的代码:
struct Node *buildGameTree(int ncubes, char *player){
struct Node *cube = calloc(1, sizeof(struct Node));
cube->cubesRemaining = ncubes;
strcpy(cube->player, player);
if (cube->cubesRemaining >= 1){
cube->left = buildGameTree(ncubes - 1, switchPlayer(cube->player));
}
if (cube->cubesRemaining >= M){
cube->right = buildGameTree(ncubes - K, switchPlayer(cube->player));
}
return (cube);
}
错误消息是:警告从不兼容的指针类型
传递switchplayer的参数1答案 0 :(得分:2)
您创建的功能会收到struct Node *
。在您的递归中,您传递了错误的参数(char *
),因此您可能只需更改为switchPlayer(cube)
如果你进一步允许我观察,你必须注意所有这些递归内存分配(calloc
),否则你最终会遇到大的内存泄漏漏洞。 :d
答案 1 :(得分:1)
您定义switchplayer
以采用struct Node*
类型,但您传递的cube->player
是char *
;因此,您传递的是不兼容的指针类型。
您可能只想传递cube
而不是{/ 1}},而不是
cube->player