在switch中分配struct不工作

时间:2014-04-06 14:18:55

标签: c

在我的程序中,我正在尝试创建一个新的基于结构的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;
        ....
    }
}

3 个答案:

答案 0 :(得分:1)

var_of_type_struct = { init_value }语法仅适用于定义;它在作业中不起作用。

三种常见的处理方式是

  1. 定义初始化struct
  2. 的功能
  3. 定义一个将字段设置为您传递的参数的函数,以及
  4. 分配struct
  5. 的各个字段

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