使用枚举类值为数组编制索引时出现"Array subscript is not an integer"错误

"Array subscript is not an integer" error when indexing array using an enum class value

本文关键字:subscript Array is not 错误 integer an 枚举 数组 索引      更新时间:2023-10-16

我正在尝试实现一个调试日志记录器,看起来像这样:

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

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

selectselect2是这样的枚举类

enum class HW
{
    HW00, 
    HW01, 
    HW02
}

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

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

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

或将enum class更改为普通的enum