C++枚举[string]错误

C++ enum [string] error

本文关键字:错误 string 枚举 C++      更新时间:2023-10-16

我使用枚举来声明变量的类型。然而,我在每个字符串上都会得到一个错误: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;

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";
 }

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

如何轻松地将c++枚举映射到字符串

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

像这样:

#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];

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

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

相关文章: