无法从大括号括起来的初始值设定项列表转换为 std::vector

Could not convert from brace-enclosed initializer list to std::vector

本文关键字:列表 转换 std vector 起来      更新时间:2023-10-16

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

void foo(vector<int> v) {
}
void fooUsage() {
    foo({0, 1, 2});
}

此操作失败,并显示:

could not convert '{0, 1, 2}' from '<brace-enclosed initializer list>' to 'std::vector<int>

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

抱歉,如果这太基本了,但我不太了解 C++11。

这是一个已知的错误,已在 gcc 4.8 中修复。

事实证明,我只需要将-std=c++11添加到 gcc 命令行。

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

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

看看它是如何说"默认启用"的?这就是误导我的原因。