C ++ VS2010中“for each”循环的编译错误

时间:2013-12-11 22:34:21

标签: c++ visual-studio-2010 loops visual-studio-2012 foreach

我正在家里做一个小小的C ++项目,我带到学校去展示我的老师。在家里我有Visual Studio 2012,而学校的计算机有Visual Studio 2010.在我的代码中,从家里,我有一个for循环,就像这样编译:

for(char c : myStr){...}

然而,当我在学校的计算机上试用它时,它没有编译,我最终不得不这样做:

for each(char c in myStr){...}

为什么会这样?

6 个答案:

答案 0 :(得分:8)

for(char c : myStr){...}语法是C++11的新语法,因此使用旧版C++的任何内容都无法使用该语法进行编译。

在C ++ 11之前,for_each标题中定义了algorithm

答案 1 :(得分:4)

Visual Studio 2010中不支持C ++ 11基于范围的for循环。

第二种形式是从C ++ / CLI(一种完全不同的语言,以.NET运行时为目标)渗透到编译器中的语法。我一会儿填补了这个错误。如果使用/Za开关进行编译,则会禁用此语言扩展名。您需要使用迭代器或std::for_each来使用C ++ 03 for循环语法。

答案 2 :(得分:4)

“range for”是一个C ++ 11功能,added in Visual Studio 2012。要了解有关Visual Studio 2008(VC9)和Visual Studio 2010(VC10)中哪些C ++ 11功能的更多信息,请查看Visual C ++团队中的the blog entry。有类似的表格可以让您了解Visual Studio 2012以及Visual Studio 2013的几个不同版本。

结论:如果您使用的是Visual Studio 2012,那么您在家中执行的for循环非常棒。如果不这样做,请使用常规forstd::for_each,而不是for each你在那里使用。

答案 3 :(得分:3)

Foreach循环是在C ++ 11标准中引入的,您学校的编译器可能与新标准不一致。

答案 4 :(得分:3)

MS VC ++ 2010在采用C ++ 2011标准之前发布。所以它不支持基于范围的for语句。另一方面,MS VC ++ 2010具有MS-language-extension for-each-in,它是在托管C ++中引入的,用于支持C#的foreach语句。

答案 5 :(得分:2)

for(char c:myStr)语法是新的C ++ 11功能之一,Visual Studio中的VC ++不支持它。

有关VS2010和VS2012 C ++编译器实现的C ++功能列表,请参阅此页: http://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx