我有一个函数,它接受一个向量作为输入参数:
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
),也不应该将初始化列表传递给期望向量的函数?
答案 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);