广告

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

什么导致这个错误?

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

如何修改这个错误?

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

方法一:使用typedef

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

typedef enum

{

RED = 1,

GREEN = 2,

BLUE = 3

} Color;

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

方法二:使用enum class

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

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

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

广告

后端开发标签