C++枚举[string]错误
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;
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)。由于标记中有多个字符,编译器会抱怨。
相关文章:
- C++:如何将 unix 时间的字符串转换为 *tm?(使用时间错误:"cannot convert 'String' to 'tm*' ")
- 为什么当我在 std::string 中打开文件名的 fstream 时出现"no matching function"错误?
- 错误消息:使用"string* +="后"no match for 'operator+='"
- 将图形表示为unordered_map<字符串、向量>时拓扑排序错误<string>
- OpenCV 3.4.3 中对 'cv::String::d eallocate()' 错误的未定义引用
- 错误:无法传递非平凡类型"std::string"的对象和更多错误
- 由于矢量引起的错误<string>?
- 错误:调用"es_queue::set_rpc_vector(std::vector >&, std::__cxx11::string)"没有匹配函数
- 错误:"cast"未命名类型void setCastDescription(std::string
- 错误:为"运算符 std::string {aka std::__cxx11::basic_string}"指定的返回类型<char>
- 为什么 std::atomic<std::string> 会给出微不足道的可复制错误?
- pip install uwsgi 失败,出现 /usr/local/include/string/string.h:7:10:致命错误:找不到'sstream'文件?
- 如果子类中没有构造函数方法,则错误"no matching function for call to 'LGame::LGame(String&)'"
- 使用 string::p op_back() 的编译错误
- 错误:请求从"Mstream"转换为非标量类型"std::string {aka std::basic_string<char>}"
- 编译错误"String does not name a type"
- ODBC 错误"String data, right truncation State code: 22001"与 SQL Server 数据库
- 错误"String subscript out of range"
- C2059 语法错误 'string' ?
- c++错误:' string '没有指定类型