结构中的枚举 – C与C ++

我正在尝试在结构中使用枚举,这可以编译并与gcc 。 但是使用g++编译时相同的代码会引发错误。

 #include #include struct foo { enum {MODE1, MODE2, MODE3} mode; enum {TYPE1, TYPE2} type; }; void bar(struct foo* bar) { bar->mode = MODE1; } int main() { struct foo* foo = (struct foo*) malloc(sizeof(struct foo)); bar(foo); printf("mode=%d\n",foo->mode); } 

gcc获得的输出:

  $ gcc foo.c $ ./a.out mode=0 

g++获得的输出:

  $ g++ foo.c foo.c: In function 'void bar(foo*)': foo.c:11: error: 'MODE1' was not declared in this scope 

MODE1foo的范围内,所以你需要

 bar->mode = foo::MODE1; 

请注意,如果要访问不带作用域的枚举类型,则需要声明它们。 例如:

 typedef enum {MODE1, MODE2, MODE3} MODE; typedef enum {TYPE1, TYPE2} TYPE; struct foo { MODE mode; TYPE type; };