将初始化程序列表作为VS12中的向量的函数参数传递时的语法错误

时间:2014-12-03 23:18:41

标签: c++ visual-studio-2012 vector

我有一个函数,它接受一个向量作为输入参数:

void expandVector(std::vector<int> inputVector, std::vector<int>& outputVector);

当我调用这个函数时,我通常只在输入向量中有1个元素,所以我传入一个带有1个元素的初始化列表。

std::vector<int> expandedVector;
expandVector({1337}, expandedVector);

这适用于gcc 4.8.2但是当我尝试使用Visual Studio 2012进行编译时出现这些错误:

source.cpp(353) : error C2143: syntax error : missing ')' before '{'
source.cpp(353) : error C2660: 'expandVector' : function does not take 0 arguments
source.cpp(353) : error C2143: syntax error : missing ';' before '{'
source.cpp(353) : error C2143: syntax error : missing ';' before '}'
source.cpp(353) : error C2059: syntax error : ')'

当我检查MSDN documentation for vector::vector时,它列出了带有初始化列表的构造函数,此外,该示例显示了它正在使用。

vector<int> v8{ { 1, 2, 3, 4 } };

即使我没有明确声明和命名向量(例如示例中的v8),也不应该将初始化列表传递给期望向量的函数?

1 个答案:

答案 0 :(得分:1)

回答我自己的问题,感谢Columbo指出我正确的方向。

Visual Studio 2012不支持初始化程序列表,请参阅MSDN上的Support for C++11 Features (Modern C++)

此外,我最初提到的vector::vector页面适用于VS 2013.当我选择correct VS 2012 version时,我发现此构造函数不可用。

解决方案将是替换

expandVector({1337}, expandedVector);

expandVector(std::vector<int>(1, 1337), expandedVector);