尝试在c中使用struct时编译错误

时间:2014-08-17 10:40:33

标签: c struct

typedef enum
{
FALSE, TRUE
} BOOLEAN;


struct player
{
char name[MAX_NAME_LEN+1];
enum colour col;
};

我正在尝试将播放器设置为当前以启动它,以便我可以处理它:

enum str_result player_turn(struct player * current, 
enum cell_contents board[][BOARDWIDTH])
{

}

我已将current定义为布尔值并尝试

BOOLEAN current;
struct player p1 = current;

但是当我编译时,我得到了错误

error: invalid initializer

那么将玩家设置为当前玩家的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

struct player仅包含namecol。它不包含BOOLEAN成员。

你可以添加这样一个成员并让该成员指出玩家是否是最新的。然而,这将是一个糟糕的设计(因为编码很繁琐,而且有更好的选择)。

相反,请使用另一个变量来指示哪个玩家是最新的。一种方法是直接指向玩家:

struct player *current_player = &p1;
// ...
player_turn(current_player, board);

// make next player be current
current_player = &p2;

或者,您可以存储int或类似内容,指示哪些玩家是最新的,然后包含一些逻辑以根据该数字获得玩家。如果玩家存储在阵列中,这将更容易,例如

struct player players[4];
int current_player = 0;
// ...
player_turn(&players[current_player], board);

// make next player be current
++current_player;
if ( current_player > 3 )
    current_player = 0;