2016-08-11 2 views
0

Моего кода получил ошибку ниже: incompatible types when assigning to type enum cell from type enum cell *Несовместимое назначения ENUM из перечисления *

Я перепробовал много способов, чтобы исправить это, но не работали. Это мой код:

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

Кто-то может исправить код, поскольку я не знаю, что я делал неправильно.

+1

Почему вы проходя 'перечисление клетки * token' функции, когда все, что вы делать с ним, использовать его как локальную переменную? – user3386109

+0

Как вызывается 'init_first_player()', что вы передаете и как эти значения определены и инициализированы? – alk

+0

Знаете ли вы разницу между указателем и вещью, которая не является указателем? – immibis

ответ

1

В init_first_playertoken является указателем на ENUM

В вашей структуре first, token это перечисление.

Вы не можете назначить указатель перечисления на перечисление.

Вы должны использовать

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

Сработало. Спасибо! –

2

Вы проходящее token в качестве указателя, предположительно потому, что вы хотите увидеть измененное значение на месте вызова. (Если вы не заботитесь о модифицированном значении, вы не должны отправлять его в эту функцию вообще).

Итак, вам необходимо разыменования его при назначении:

// use *token (instead of just token) to dereference and assign 
*token = (colorNo + 1 == 1) ? RED : BLUE; 

Same при назначении его first->token:

first->token = *token; 
+0

Большое спасибо –

Смежные вопросы