[英]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 <>將值映射到字符串值。
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.