簡體   English   中英

C ++枚舉[字符串]錯誤

[英]C++ enum [string] error

我正在使用一個枚舉來聲明變量的類型。 但是,我在每個字符串上都收到一條錯誤消息: 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;

我認為枚舉不能映射到字符/字符串。 您可以使用std :: map <>將值映射到字符串值。

如何輕松地將C ++枚舉映射到字符串

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

枚舉必須是整數值。 如果需要,可以將枚舉值用作字符串數組的索引。

像這樣:

#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)。 由於標記中有多個字符,編譯器會抱怨。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM