C 从枚举到枚举的分配不兼容*

C 从枚举到枚举的分配不兼容*,c,pointers,enums,C,Pointers,Enums,我的代码出现以下错误: 从类型enum cell*分配给类型enum cell时不兼容的类型 我尝试了很多方法来修复它,但都没有成功。这是我的代码: BOOLEAN init_first_player(struct player * first, enum cell * token) { strcpy(first->name, "Bob"); first->score = 0; int colorNo = rand() % 2; token = (c

我的代码出现以下错误:
从类型enum cell*分配给类型enum cell时不兼容的类型

我尝试了很多方法来修复它,但都没有成功。这是我的代码:

BOOLEAN init_first_player(struct player * first, enum cell * token) {
    strcpy(first->name, "Bob");
    first->score = 0;

    int colorNo = rand() % 2;
    token = (colorNo + 1 == 1) ? RED : BLUE;

    first->token = token; //Error occurs here
    return TRUE;
}

this is my data structure:

struct Player {
    char name[20];
    enum cell token; //takes 0 - 1 - 2
    unsigned score;
};

enum cell {
    BLANK, RED, BLUE
};

有人可以修复代码,因为我不知道我做错了什么

init_first_player
token
中是指向枚举的指针

在您的结构中,
first
token
是一个枚举

不能将指向枚举的指针分配给枚举

你应该使用

*token = (colorNo + 1 == 1) ? RED : BLUE;
first->token = *token

init\u first\u播放器中,令牌是指向枚举的指针

在您的结构中,
first
token
是一个枚举

不能将指向枚举的指针分配给枚举

你应该使用

*token = (colorNo + 1 == 1) ? RED : BLUE;
first->token = *token

您将
令牌作为指针传入,可能是因为您希望在调用站点上看到修改后的值。(如果您不关心修改后的值,则不应在此函数中发送它)

因此,分配时需要取消对其的引用:

// use *token (instead of just token) to dereference and assign
*token = (colorNo + 1 == 1) ? RED : BLUE;
将其分配给
first->token
时相同:

first->token = *token;

您将
令牌作为指针传入,可能是因为您希望在调用站点上看到修改后的值。(如果您不关心修改后的值,则不应在此函数中发送它)

因此,分配时需要取消对其的引用:

// use *token (instead of just token) to dereference and assign
*token = (colorNo + 1 == 1) ? RED : BLUE;
将其分配给
first->token
时相同:

first->token = *token;

为什么要将
enum cell*token
传递给函数,而您所做的只是将其用作局部变量?如何调用
init\u first\u player()
,你传递的是什么以及这些值是如何定义和初始化的?你知道指针和非指针的东西之间的区别吗?为什么你要传递
enum cell*token
到函数,而你所做的只是像局部变量一样使用它?如何调用
init_first_player()
,你传递的是什么?这些值是如何定义和初始化的?你知道指针和非指针之间的区别吗?非常感谢