c++ - 无法从 'initializer-list' 转换为 'std::initializer_list<Keyword> &'

标签 c++ c++11 visual-studio-2013 initializer-list

我正在尝试使用初始化列表将关键字列表传递给分词器进行注册。但它在 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> &'

最佳答案

您正在尝试将临时对象绑定(bind)到非常量引用;

std::initializer_list<Keyword>& lis

试试吧;

std::initializer_list<Keyword> const& lis

或者

std::initializer_list<Keyword> lis

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

关于c++ - 无法从 'initializer-list' 转换为 'std::initializer_list<Keyword> &',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31609880/

相关文章:

c++ - 保留 QTextEdit 中的光标位置

c++ - 让 GDB 在回溯中扩展 arg=...

c++ - 虚函数效率与 'final'关键字

visual-studio-2013 - 在Visual Studio 2013中禁用自动插入HTML中的双引号

c++ - += 一对运算符和 make_pair 与模板

c++11 - x86 mfence 和 C++ 内存屏障

c++ - 使用 boost 序列化到磁盘后无法加载回数据

c# - Visual Studio 找不到新项目的任何引用

c++ - 类内成员初始值设定项因 VS 2013 而失败

c++ - C++ 中重载算术运算符的最佳签名是什么?