我使用枚举来声明变量类型。但是,我在每个字符串上收到错误:Error: expression must be an integral constant expression
。如果我将""
更改为''
,则五个字符或以上的字词会出现错误:Error: too many characters in a character constant
。我该怎么办?
typedef enum
{
INT = "int",
STRING = "string",
BOOLEAN = "bool",
CHARACTER = "char",
DOUBLE = "double",
FLOAT = "float",
LONG = "long",
SHORT = "short"
} variable_types;
答案 0 :(得分:2)
我认为枚举不能映射到字符/字符串。你可以使用std :: map<>将值映射到字符串值。
答案 1 :(得分:2)
enum
类型不是用于表示字符串。如果你仔细阅读它,你会发现它只存储了int
种类型。如果您需要映射这样的值,enum
不是一个好的选择。
如果要保留语法,请使用#define
命令:
#define INT "int"
#define STRING "string"
...
#define SHORT "short"
您还可以将当前代码与std::map
:
#include <map>
typedef enum
{
INT,
STRING,
...
SHORT
} enumeratedTypes;
map<enumeratedTypes,string> variable_types;
variable_types[INT] = "int";
variable_types[STRING] = "string";
...
variable_types[SHORT] = "short";
或者只是通过switch
语句检查一下,如果你需要一个函数:
string foo(enumeratedTypes type){
int choice = type;
switch(choice){
case INT:
return "int";
case STRING:
return "string";
...
case SHORT:
return "short";
default:
return "error";
}
答案 2 :(得分:1)
枚举必须是整数值。如果需要,可以使用枚举值作为索引到字符串数组中。
像这样:
#include <vector>
#include <string>
enum variable_types
{
INT,
STRING,
BOOLEAN,
CHARACTER,
DOUBLE,
FLOAT,
LONG,
SHORT
};
// ...
const std::vector<std::string> enumNames = { "int", "string", "bool", ... };
variable_types someEnum = ...;
auto enumName = enumNames[someEnum];
答案 3 :(得分:1)
据我所知,C / CPP标准不支持字符串值枚举。枚举的值必须是整数(signed-unsigned,length取决于编译器)
如果你把你的字符串放在''标记中,这意味着字符串应该被解释为一个字符 - 当然 - 一个字符有一个整数值(0-255)。由于在标记中有多个字符,编译器会抱怨。