结构中的枚举 – 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
MODE1
在foo
的范围内,所以你需要
bar->mode = foo::MODE1;
请注意,如果要访问不带作用域的枚举类型,则需要声明它们。 例如:
typedef enum {MODE1, MODE2, MODE3} MODE; typedef enum {TYPE1, TYPE2} TYPE; struct foo { MODE mode; TYPE type; };