我有一些我在Ubuntu上开发的代码,现在我正在尝试在Windows 7上编译它(MS VS 2010)。
vector<float> tmp;
....
tmp = {3.0,4.5,9.4};
这给了我语法错误
error C2143: syntax error : missing ';' before '{'
这是因为Visual Studio不支持此功能吗?或者我应该在属性中启用一些开关。我将“Platform Toolset”属性设置为“v100。”
谢谢。
答案 0 :(得分:33)
默认情况下,Visual Studio 2010 C ++编译器上启用了C ++ 0x功能。例如,它不需要额外的开关来使用lambdas,auto
等等......如果你得到那个错误,那是因为在所有情况下它都不受支持。
修改强>
根据此MSDN文章,初始化列表不是2010年支持的6个功能之一
Visual Studio 2010中的Visual C ++编译器启用了六种C ++ 0x核心语言功能:lambda表达式,auto关键字,rvalue引用,static_assert,nullptr和decltype
答案 1 :(得分:16)
Visual Studio 2010不支持初始化列表。 查看here以获取Visual Studio 2010中支持的C ++ 0x功能
Visual Studio 2012也不支持它们。 您可以找到在Visual Studio 2012 / VS11 here和here中实现的C ++ 11功能。
初始化程序列表的第一个实现位于Visual C++ Compiler November 2012 CTP。
答案 2 :(得分:3)
即使它们在那里,这段代码也行不通,因为它为一个名为'tmp'的现有对象分配了一个初始化列表,它不是一个向量。您可以分配给这样的矢量:
vector<int> tmp = vector<int> {...}; // calls constructor, initializes then assigns
或
std::initializer_list<int> iniList = {1,2,3,4,5,6};
但不是
std::vector<int> tmp;
tmp = {...}; // calls assignment operator
顺便说一句:VS2012中的功能仍然缺失。