在我的程序中,我正在尝试创建一个新的基于结构的od switch语句,但是当我这样做时,编译器会返回错误:
位置分配的行上的 Syntax error before '{' token
我使用dev-c ++ 4.9.9.2作为IDE(我认为它使用MinGW作为编译器)。这是我兄弟的编程任务,我正在帮助他,我几年没见过C,所以我生锈了(之前我也不是冠军)。
这是简化的代码:
typedef enum{TOP_RIGHT = 0,TOP_LEFT,BOTTOM_RIGHT,BOTTOM_LEFT} diagonal_t;
typedef struct
{
int row;
int column;
} position_t;
...
void checkDiagonal(diagonal_t diagonal_to_check)
{
...
position_t position;
switch(diagonal_to_check)
{
case TOP_RIGHT:
position = {0,0}; //here's the error, but I don't know how to repair it.
//how to create a new struct here without disrupting the
//switch?
break;
case TOP_LEFT:
position = {0,0};
break;
....
}
}
答案 0 :(得分:1)
var_of_type_struct = { init_value }
语法仅适用于定义;它在作业中不起作用。
三种常见的处理方式是
struct
struct
。方法1:
void init_pos(position_t *p) {
p->row = 0;
p->column = 0;
}
...
case TOP_LEFT:
init_pos(&position);
break;
方法2:
void set_pos(position_t *p, int r, int c) {
p->row = r;
p->column = c;
}
...
case TOP_LEFT:
set_pos(&position, 0, 0);
break;
方法3:
case TOP_LEFT:
position.row = 0;
position.column = 0;
break;
答案 1 :(得分:0)
你不能这样做:分配和初始化不是一回事。您正尝试在分配中使用初始化程序语法。您必须手动设置两个字段:
case TOP_RIGHT:
position.row = 0;
position.column = 0;
/* ... */
答案 2 :(得分:0)
你需要转换为struct类型,如下所示:
position = (position_t){0, 0};