C++语法错误:枚举成员需要在括号内被初始化,应该怎么处理?

什么是枚举?

在C++中,枚举是一种用户自定义的数据类型,它是一组整数常量的集合。

枚举的语法格式如下:

enum 枚举名 {

枚举项1 = 值1,

枚举项2 = 值2,

...

枚举项n = 值n

};

其中,枚举名是一个标识符,用来表示该枚举类型的名称;值1、值2、...、值n则是整型常量,表示每个枚举项对应的值。

枚举中的每个枚举项都有一个对应的整数值,而且这些值默认从0开始,依次加1。

枚举成员需要在括号内被初始化

当我们定义一个枚举时,如果没有为枚举项指定具体的值,则编译器会为其自动分配默认值。但是,在某些情况下,我们需要手动为枚举项指定具体的值。这时,我们需要在括号内对其进行初始化。

例如:

enum Color {

RED, // 默认值为0

GREEN, // 默认值为1

BLUE // 默认值为2

};

在上面的例子中,我们为枚举项指定了默认的值,即RED的值为0,GREEN的值为1,BLUE的值为2。

但是,如果我们想要为某些枚举项指定具体的值(不使用默认值),则需要在括号内进行初始化。

例如:

enum Fruit {

APPLE = 1,

ORANGE = 2,

BANANA = 3,

MANGO = 4

};

在上面的例子中,我们为枚举项APPLE指定了值为1,为枚举项ORANGE指定了值为2,为枚举项BANANA指定了值为3,为枚举项MANGO指定了值为4。

枚举成员缺少初始化值的问题

在定义枚举时,如果某个枚举项没有被指定具体的值,而且该枚举项前面的枚举项指定了具体的值,则编译器会将该枚举项的值设置为前一个枚举项的值加1。

例如:

enum Direction {

EAST = 1,

WEST,

NORTH = 100,

SOUTH

};

在上面的例子中,枚举项EAST的值为1,枚举项WEST没有被指定具体的值,但是它的值会被设置为EAST的值加1,即2。同理,枚举项NORTH的值为100,枚举项SOUTH没有被指定具体的值,但是它的值会被设置为NORTH的值加1,即101。

枚举成员需要在括号内被初始化的错误

当我们在定义枚举时,如果某个枚举项没有被指定具体的值,而且该枚举项前面的枚举项也没有被指定具体的值,那么就会报“枚举成员需要在括号内被初始化”的错误。

例如:

enum Month {

JAN, // 正确,值为0

FEB, // 正确,值为1

MAR, // 正确,值为2

APR, // 正确,值为3

MAY, // 正确,值为4

JUN, // 错误,需要在括号内初始化

JUL, // 正确,值为5

AUG, // 正确,值为6

SEP, // 正确,值为7

OCT, // 正确,值为8

NOV, // 正确,值为9

DEC // 正确,值为10

};

在上面的例子中,枚举项JUN和它前面的枚举项MAY都没有被指定具体的值,因此就会报“枚举成员需要在括号内被初始化”的错误。

为了消除这个错误,我们需要在括号内对枚举项进行初始化。

enum Month {

JAN, // 正确,值为0

FEB, // 正确,值为1

MAR, // 正确,值为2

APR, // 正确,值为3

MAY, // 正确,值为4

JUN = 5,// 正确,值为5

JUL, // 正确,值为6

AUG, // 正确,值为7

SEP, // 正确,值为8

OCT, // 正确,值为9

NOV, // 正确,值为10

DEC // 正确,值为11

};

在上面的例子中,我们为JUN枚举项指定了值为5,消除了错误提示。

总结

在定义枚举时,我们可以手动为枚举项指定具体的值,也可以让编译器自动分配默认值。但是,如果某个枚举项没有被指定具体的值,而且该枚举项前面的枚举项也没有被指定具体的值,那么就需要在括号内对该枚举项进行初始化,否则就会报“枚举成员需要在括号内被初始化”的错误。

枚举是一种非常常用的数据类型,我们需要掌握其基本语法和使用规则。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签