难以定义枚举

时间:2014-04-08 21:40:35

标签: c enums typedef

typedef enum Colors{black, white};
void chess(int rows, int cols, Colors array[rows][cols]) {
   for (int i = 0; i <  rows; i++) {
       for (int j = 0; j < cols; j++) {
           if (i+j % 2 == 0) {
               array[i][j] = black;
           } else {
               array[i][j] = white;
           }
       }
   }
}

我收到错误error: expected declaration specifiers or ‘...’ before ‘Colors’

我已确定我已正确声明枚举类型,因此我不确定这里的问题是什么。

2 个答案:

答案 0 :(得分:5)

枚举通常定义为enum Colors { black, white };,必须通过名称enum Colors引用(前面的enum是必需的)。例如:

enum Colors { black, white };

void print_color(enum Colors color) {
  if(color == black) {
    printf("Black\n");
  } else if(color == white) {
    printf("White\n");
  }
}

现在,“typedef”语法为typedef enum { black, white } Colors;,现在我们只需使用名称Colors(前面没有enum)来引用它:

typedef enum { black, white } Colors;

void print_color(Colors color) {
  if(color == black) {
    printf("Black\n");
  } else if(color == white) {
    printf("White\n");
  }
}

这种奇怪的语法是因为enum { black, white }实际上是一个无名的枚举,typedef关键字为这个无名的类型赋予了名称。

答案 1 :(得分:0)

尝试按如下方式声明枚举:

typedef enum Colors
{
  black,
  white
} my_colors;

并在函数中使用my_colors。我认为这可能会有所帮助