无法从"初始值设定项列表"转换为"std::initializer_list<Keyword> &"

Cannot convert from 'initializer-list' to 'std::initializer_list<Keyword> &'

本文关键字:initializer std lt gt Keyword list 转换 列表      更新时间:2023-10-16

我试图使用初始化列表将关键字列表传递给标记器以进行注册。但它在Visual Studio 2013中不起作用。它在ideone.com的gcc中工作。有没有办法在VS中使用这个或类似的语法?

struct Keyword
{
    const char* name;
    int id;
};
void AddKeywords(int group, std::initializer_list<Keyword>& lis) {}
// usage
AddKeywords(ITEM_TYPE, {
    { "weapon", IT_WEAPON },
    { "armor", IT_ARMOR }
});

完整错误:

item.cpp(810): error C2664: 'void AddKeywords(int,std::initializer_list<Keyword> &)' : cannot convert argument 2 from 'initializer-list' to 'std::initializer_list<Keyword> &'

您正在尝试将临时对象绑定到非const引用;

std::initializer_list<Keyword>& lis

尝试;

std::initializer_list<Keyword> const& lis

std::initializer_list<Keyword> lis

当使用GCC构建时,启用-Wall -pedantic,它也会给你一个错误。