2016-08-11 3 views
0

Mein Code bekam eine Fehlermeldung unter: incompatible types when assigning to type enum cell from type enum cell *Inkompatible Zuordnung von ENUM ENUM *

Ich habe viele Wege versucht, es zu beheben, aber nicht funktioniert hat. Dies ist mein Code:

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

Jemand kann den Code bitte beheben, wie ich weiß nicht, was ich falsch gemacht haben.

+1

Warum sind Sie vorbei 'Enum Zelle * token' auf die Funktion, wenn alles, was Sie damit machen Sie es wie eine lokale Variable? – user3386109

+0

Wie wird 'init_first_player()' aufgerufen, was übergibt man und wie werden diese Werte definiert und initialisiert? – alk

+0

Kennen Sie den Unterschied zwischen einem Zeiger und einem Ding, das kein Zeiger ist? – immibis

Antwort

1

In init_first_playertoken ein Zeiger ist

In Ihrer Struktur Enum first ist token eine Enumeration.

Sie können einer Aufzählung keinen Zeiger auf Aufzählung zuweisen.

sollten Sie

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

Es hat funktioniert. Vielen Dank! –

2

Sie token in als Zeiger, sind vorbei verwenden vermutlich, weil Sie den geänderten Wert an der Aufrufstelle sehen wollen. (Wenn Sie den geänderten Wert nicht interessieren, sollten Sie ihn in dieser Funktion überhaupt nicht senden).

So müssen Sie dereferenzieren es bei der Zuordnung:

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

Gleiche, wenn es um first->token zuweisen:

first->token = *token; 
+0

Vielen Dank –