【问题标题】:Could not convert from brace-enclosed initializer list to std::vector无法从大括号括起来的初始值设定项列表转换为 std::vector
【发布时间】:2015-01-21 19:32:21
【问题描述】:

我看到了很多类似的问题,但我认为我看到的问题并不完全相同。这是非常基本的。我的讲师的一些代码无法编译,我将问题提炼到这个测试用例:

void foo(vector<int> v) {
}

void fooUsage() {
    foo({0, 1, 2});
}

这失败了:

could not convert '{0, 1, 2}' from '&lt;brace-enclosed initializer list&gt;' to 'std::vector&lt;int&gt;

注意:它适用于 GCC 5.0.0 20141228,但在我的 GCC 4.7.1 (tdm-1) 上失败。

对不起,如果这太基础了,但我不太了解 C++11。

【问题讨论】:

  • Ermm...该版本缺少编译器支持,还是有错误?
  • 我相信 GCC 4.7.1 对诸如此类的 c++11 功能的支持不完整。

标签: c++ c++11 gcc


【解决方案1】:

【讨论】:

    【解决方案2】:

    原来我只需要在 gcc 命令行中添加-std=c++11

    注意:我错误地认为这是默认开启的,因为我也收到了一些类似这样的警告:

    extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]

    看到“默认启用”是怎么说的吗?这就是误导我的原因。

    【讨论】:

    • 即使我的 g++/gcc 版本是 5.4.0,我也必须添加这个标志。猜猜他们做了什么,必须再次添加标志!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 2011-05-31
    • 1970-01-01
    • 2018-09-06
    相关资源
    最近更新 更多