使用枚举类值索引数组时,“数组下标不是整数”错误

时间:2014-08-22 07:24:26

标签: c++ c++11

我正在尝试实现一个如下所示的调试记录器:

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]);

我应该怎么做?我需要使用该名称和我自己的日志功能。

selectselect2是这样的枚举类

enum class HW
{
    HW00, 
    HW01, 
    HW02
}

1 个答案:

答案 0 :(得分:4)

enum class不能隐式用作整数,也不能用作数组订阅。您需要将其明确地转换为整数类型:

NAME[static_cast<std::size_t>(select)]

或更改您的NAME的定义方式,例如使用std::map<HW, std::string>类型

或将enum class更改为普通的enum