我正在尝试实现一个如下所示的调试记录器:
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]);
或者喜欢这个
loggingEvent("setting Input, input=%u, select=%s, select2=%s", input,
NAME[select], NAMETWO[select2]);
我应该怎么做?我需要使用该名称和我自己的日志功能。
select
和select2
是这样的枚举类
enum class HW
{
HW00,
HW01,
HW02
}
答案 0 :(得分:4)
enum class
不能隐式用作整数,也不能用作数组订阅。您需要将其明确地转换为整数类型:
NAME[static_cast<std::size_t>(select)]
或更改您的NAME的定义方式,例如使用std::map<HW, std::string>
类型
或将enum class
更改为普通的enum