错误: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++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)