错误:C++98 模式下不允许基于范围的“for”循环

Posted

技术标签:

【中文标题】错误:C++98 模式下不允许基于范围的“for”循环【英文标题】:Error: Range-based 'for' loops are not allowed in C++98 mode 【发布时间】:2014-04-04 09:44:01 【问题描述】:

所以我正在关注此页面上的教程: http://www.cplusplus.com/doc/tutorial/control/ 但是我在执行范围/基于 for 循环时遇到了麻烦。我找到了这个页面: GNU GCC compiler updating那里的答案说我应该打开“项目”和“属性”。但是当我尝试这样做时,“属性”选项是灰色的,没有任何解释: http://imageshack.com/a/img571/4371/xd1x.png 那么..如何激活范围/基于 for 循环?

【问题讨论】:

PNG 链接无效。 (这就是为什么建议在问题中嵌入错误消息,而不是链接到外部网站) 【参考方案1】:

-std=c++11 标志传递给编译器。当然,GCC 应该足够新鲜(>=4.7)来支持所有这些现代标准。对于 CodeBlocks 13.12:设置 -> 编译器 -> 选项卡“编译器标志” -> 选项“让 g++ 遵循 C++11 ISO C++ [-std=c++11]”

【讨论】:

我正在阅读初学者教程,这意味着我在这里完全是个菜鸟。将标志传递给编译器是什么意思? 好吧,在命令行中的其他编译器选项中指定该字符串,如下所示:g++ -std=c++11 -o test_executable test_source.cpp 你高估了我的知识,我不知道在哪里写 你如何编译你的代码?在 IDE 中?尝试在 IDE 菜单(设置?)中找到配置编译器调用的位置。 确实,我使用代码块!对不起,忘了提这个。我在第一篇文章中发布了一张图片,显示由于某种原因我无法访问这些属性【参考方案2】:

上面给出的使用-std=c++11 的解决方案对我不起作用。

这是我的编译器的目标和版本详细信息。 gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) Target: x86_64-linux-gnu

当我尝试时,这就是发生的事情。 $ g++ -std=c++11 program.cpp cc1plus: error: unrecognized command line option ‘-std=c++11’

这解决了我的问题。 $ g++ -std=c++0x program.cpp

【讨论】:

【参考方案3】:

Dev-Cpp 5.11中,您只需点击工具>编译器选项>设置>代码生成>(最后一个选项)语言标准(-std)从下拉列表中选择(ISO C++ 11)。

【讨论】:

【参考方案4】:

如果您在 Code::Blocks 中遇到此错误,这可能会对您有所帮助 -

点击设置 -> 编译器 -> 编译器设置 -> 编译器标志

在“常规”部分下,选中 [✓] 旁边的框: 让 g++ 遵循 C++11 ISO C++ 语言标准 [-std=c++11]

【讨论】:

【参考方案5】:

这两个:

g++ -std=c++11 -o test_executable test_source.cpp
g++ -std=c++0x -o program program.cpp

为我工作。

编译后唯一要做的就是将test_executable(在第一种情况下)执行为./test_executables或程序(在第二种情况下)作为./program执行。

【讨论】:

【参考方案6】:

使用上述解决方案 g++ -std=c++0x program.cpp 作品。但是,该命令需要稍作修改才能使用常用命令运行程序: ./program

我用过 g++ -std=c++0x -o program program.cpp 一切都很完美。

【讨论】:

【参考方案7】:

如果您使用QT5.5,您可以通过在.pro 文件中添加以下行来实现。

CONFIG += c++11

【讨论】:

【参考方案8】:

最好的解决方案是在 Dev C++ 中这样做:

    转到“工具”选项 选择“编译器选项” 点击“设置” 点击“代码生成” 转到“选择语言”并选择“ISO C++11”

那么你的问题就解决了。

【讨论】:

以上是关于错误:C++98 模式下不允许基于范围的“for”循环的主要内容,如果未能解决你的问题,请参考以下文章

C++范围for

C++11新特性:14—— C++11 for循环(基于范围的循环)详解

只读模式下不允许写操作 - 持久化时出现问题

严格模式下不允许对象文字中的重复数据属性

喵呜:C++基础系列:auto关键字(C++11)基于范围的for循环(C++11)指针空值nullptr(C++11)

喵呜:C++基础系列:auto关键字(C++11)基于范围的for循环(C++11)指针空值nullptr(C++11)