使用枚举类值为数组编制索引时出现"Array subscript is not an integer"错误
"Array subscript is not an integer" error when indexing array using an enum class value
我正在尝试实现一个调试日志记录器,看起来像这样:
loggingEvent("setting Input, task=%u, input=%u, select=%s", task, input,
NAME[select]);
,
const char* NAME[] =
{
"A",
"B",
"C",
"D"
};
到目前为止,我已经这样做了:
void loggingEvent( const char* fmt, ... );
和
void loggingEvent( const char* fmt, ... )
{
char buffer[256]; //Hope this is OK :)
va_list args;
va_start(args, fmt);
vsnprintf(buffer,256,fmt, args);
perror(buffer);
va_end(args);
}
但是我得到错误:
error: array subscript is not an integer
warning: zero-length gnu_printf format string
我只是想不出我怎么能做到这一点。我不知道我将得到多少输入,它可以像这样
loggingEvent("setting Input, input=%u, select=%s", input,
NAME[select]);
或Like this
loggingEvent("setting Input, input=%u, select=%s, select2=%s", input,
NAME[select], NAMETWO[select2]);
我该怎么做呢?我需要使用这个名称和我自己的日志功能。
select
和select2
是这样的枚举类
enum class HW
{
HW00,
HW01,
HW02
}
enum class
不能隐式用作整数,也不能作为数组订阅。您需要显式地将其强制转换为整型:
NAME[static_cast<std::size_t>(select)]
或者改变NAME的定义方式,例如使用std::map<HW, std::string>
类型,
或将enum class
更改为普通的enum
相关文章:
- C++11 中不同类型的对象的 std::array 的替代方案
- constexpr begin of a std::array
- C++如果必须在编译时确定大小,std::array 有什么意义?
- OpenGL VBO Indexing ( How to compute Index Array)
- 标准::unordered_map 中的 std::array 的值初始化
- "Warning: Comma within array index expression"但逗号分隔函数参数
- 确保编译时的特定 std::array 位置
- std::array的长度有大小限制吗?
- 将 std::array 移动到另一个 std::array
- 首先按给定顺序打印所有数字,然后使用 Array 打印所有字符和其他符号
- 为什么 std::shared_ptr 被认为是"heavy"和"expensive",但 std::array "same perfprmance as plain (c-style) arrays
- 将 **float array 从 C++ Dll 传递给 python
- std::bind on statd::array 的运算符 []
- 检查输入 std::array 指针数据是否等于某个常量数组
- 我可以安全地复制矢量<array>吗?
- 解析问题 - 预期的非限定 ID - #include <array> 编译错误
- 错误"invalid types ... for array subscript"是什么意思?
- 使用枚举类值为数组编制索引时出现"Array subscript is not an integer"错误
- 如何解决错误"invalid types 'int [x][const char*]' for array subscript"?
- 模板函数"Subscript requires array type",但适用于较小的项目。为什么?