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

时间:2014-05-04 22:29:39

标签: c++ c gcc struct enums

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

#include<stdio.h>
#include<stdlib.h>
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

1 个答案:

答案 0 :(得分:11)

MODE1属于foo,因此您需要

bar->mode = foo::MODE1;

请注意,如果要访问没有范围的枚举类型,则需要声明它们。例如:

typedef enum {MODE1, MODE2, MODE3} MODE;
typedef enum {TYPE1, TYPE2} TYPE;

struct foo
{
    MODE mode;
    TYPE type;
};