什么导致这个错误?
在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和定义为常量。在选择解决方法时,应该根据具体情况来考虑,以达到更好的效果。