C++报错:不允许声明非整数类型的枚举,应该怎么修改?

什么导致这个错误?

在C++中,枚举类型有两种:普通枚举和枚举类。普通枚举的定义必须由整数常量表达式初始化。而非整数类型的枚举是无法初始化的,这就是报错的原因。

如何修改这个错误?

解决这个错误的方法就是将枚举定义为整数类型。

方法一:使用typedef

使用typedef可以将非整数类型的枚举定义为整数类型的枚举。

typedef enum

{

RED = 1,

GREEN = 2,

BLUE = 3

} Color;

上面的代码定义了一个整数类型的枚举Color,其中RED、GREEN、BLUE的值分别为1、2、3。

方法二:使用enum class

使用enum class可以定义一个强类型的枚举,枚举值是该类型的一种,不会自动转换为整型。

enum class Color : int

{

RED = 1,

GREEN = 2,

BLUE = 3

};

上面的代码定义了一个强类型的枚举Color,其中RED、GREEN、BLUE的值分别为1、2、3。另外需要注意的是,必须指明底层类型为int。

方法三:定义为const int常量

将枚举值定义为常量也可以解决这个问题。

const int RED = 0;

const int GREEN = 1;

const int BLUE = 2;

应该如何选择?

在选择解决方法时,可以根据具体情况来考虑。

1. 如果枚举值比较少且不需要进行转换,可以使用enum class。

使用enum class可以防止枚举值之间的混淆和不必要的转换。

2. 如果枚举值是与整数相关的,可以使用typedef。

typedef 可以将一个非整数类型的枚举定义为一个整数类型的枚举。

3. 如果需要在不同文件之间共享枚举值,则可以使用常量。

使用常量可以将枚举值定义为整数常量,在不同文件之间共享更加方便。

总结

本文介绍了C++中“不允许声明非整数类型的枚举”的报错信息以及三种解决方法,分别是使用typedef、enum class和定义为常量。在选择解决方法时,应该根据具体情况来考虑,以达到更好的效果。

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

后端开发标签