【问题标题】:Compilation error with "for each" loop in C++ VS2010C++ VS2010中“for each”循环的编译错误
【发布时间】:2013-12-11 22:34:21
【问题描述】:

我在家里做一个小的 C++ 项目,我把它带到学校给我的老师看。在家里我有 Visual Studio 2012,而学校的电脑有 Visual Studio 2010。在我的代码中,我在家里有一个 for 循环,就像这样,它编译:

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

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

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

为什么会这样?

【问题讨论】:

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


【解决方案1】:

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

在 C++11 之前,for_eachalgorithm 标头中定义。

【讨论】:

    【解决方案2】:

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

    第二种形式是从 C++/CLI(一种针对 .NET 运行时的完全不同的语言)泄漏到编译器中的语法。前段时间我在这个问题上填写了一个错误。如果您使用/Za 开关进行编译,它将禁用此语言扩展。您将需要使用 C++03 for 循环语法,使用迭代器或 std::for_each

    【讨论】:

      【解决方案3】:

      “范围”是 added in Visual Studio 2012 的 C++ 11 功能。要详细了解 Visual Studio 2008 (VC9) 和 Visual Studio 2010 (VC10) 中有哪些 C++ 11 功能,请查看 Visual C++ 团队的the blog entry。有类似的表格让您了解Visual Studio 2012Visual Studio 2013 的几个不同版本。

      底线:如果您有 Visual Studio 2012,那么您在家中执行的 for 循环非常棒。如果您没有,请使用常规的 forstd::for_each,而不是您的 for each在那里使用。

      【讨论】:

        【解决方案4】:

        C++11 标准中引入了 Foreach 循环,您学校的编译器可能没有跟上新标准。

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

            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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-07-19
              • 2015-11-12
              • 1970-01-01
              • 1970-01-01
              • 2016-01-20
              相关资源
              最近更新 更多