C++ C++;枚举[字符串]错误

C++ C++;枚举[字符串]错误,c++,string,enums,quote,C++,String,Enums,Quote,我使用枚举来声明变量的类型。但是,我在每个字符串上都得到一个错误,即:error:expression必须是整型常量表达式。如果我将“更改为”,则五个字符或以上的单词会产生错误:错误:字符常量中的字符太多。我该怎么办 typedef enum { INT = "int", STRING = "string", BOOLEAN = "bool", CHARACTER = "char", DOUBLE = "double", FLOAT = "floa

我使用枚举来声明变量的类型。但是,我在每个字符串上都得到一个错误,即:
error:expression必须是整型常量表达式
。如果我将
更改为
,则五个字符或以上的单词会产生错误:
错误:字符常量中的字符太多
。我该怎么办

typedef enum
{
    INT = "int",
    STRING = "string",
    BOOLEAN = "bool",
    CHARACTER = "char",
    DOUBLE = "double",
    FLOAT = "float",
    LONG = "long",
    SHORT = "short"
} variable_types;

枚举必须是整数值。如果需要,可以将枚举值用作字符串数组的索引

像这样:

#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];
#包括
#包括
枚举变量类型
{
INT,
一串
布尔,
性格
双重的
浮动
长的
短
};
// ...
const std::vector enumNames={“int”、“string”、“bool”、…};
变量_类型someEnum=。。。;
自动枚举名=枚举名[someEnum];

我认为枚举不能映射到字符/字符串。可以使用std::map将值映射到字符串值


据我所知,C/CPP标准不支持字符串值枚举。枚举值必须是整数(有符号无符号,长度取决于编译器)


如果将字符串放在“”标记中,这意味着该字符串将被解释为一个字符,当然,一个字符有一个整数值(0-255)。因为标记中有多个字符,编译器会抱怨。

枚举类型不是用来表示字符串的。如果你读一读它,你会注意到它只存储
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";

使用整型常量表达式,正如编译器错误所提示的那样。@juanchopanza-我该怎么做?@user2976089是最简单的方法吗?省略字符串。检查是否可以使用带有
static const std::string
s的类替换枚举?我开始回答这个问题,但我找不到使用此选项的人的引用。最佳做法是将枚举值映射到字符串,即创建一个struct:typedef struct{my_enum_type enumval;std::string enumstring}然后,您可以定义一个函数来向上查找字符串-如果您的枚举以0开头,并且是严格的升序,则可以使用枚举来寻址上述数组。但是要小心,如果您添加了一个枚举项,那么您还必须添加一个结构数组项,否则您可能会崩溃或得到一个无效的字符串注意,如果您不需要枚举具有特殊的数值,您可以使用向量而不是映射(如链接中所建议的)。
string foo(enumeratedTypes type){
   int choice = type;
   switch(choice){
   case INT:
      return "int";
   case STRING:
      return "string";
   ...
   case SHORT:
      return "short";
   default:
      return "error";
 }