我是C ++的新手。我写的时候
for (char* c : v)
{
cout << c;
}
我得到了
“C ++ 98模式中不允许使用'基于范围'的循环”
据我了解,我必须更改我的GCC版本(或只是模式?)。我的g++ -v
:
使用内置规格。 COLLECT_GCC =克++ COLLECT_LTO_WRAPPER = / usr / lib中/ GCC / i686的-Linux的GNU / 4.7 / LTO-包装 目标:i686-linux-gnu 配置为:../ src / configure -v --with-pkgversion ='Ubuntu / Linaro 4.7.2-2ubuntu1'--with-bugurl = file:///usr/share/doc/gcc-4.7/README。错误--enable-languages = c,c ++,go,fortran,objc,obj-c ++ --prefix = / usr --program-suffix = -4.7 --enable-shared --enable-linker-build-id - with-system-zlib --libexecdir = / usr / lib --without-included-gettext --enable-threads = posix --with-gxx-include-dir = / usr / include / c ++ / 4.7 --libdir = / usr / lib --enable-nls --with-sysroot = / --enable -clocale = gnu --enable-libstdcxx-debug --enable-libstdcxx-time = yes --enable-gnu-unique-object --enable -plugin --enable-objc-gc --enable-targets = all --disable-werror --with-arch-32 = i686 --with-tune = generic --enable-checking = release --build = i686- linux-gnu --host = i686-linux-gnu --target = i686-linux-gnu 线程模型:posix gcc版本4.7.2(Ubuntu / Linaro 4.7.2-2ubuntu1)`
无法使用gcc program.cpp
和gcc -pedantic -std=c99 program.cpp
从vim(使用c.vim插件),sublime text3和终端进行编译。
我已经下载了gcc 4.8.1,但它不是deb包,所以无法正确安装。还听说过C ++ 11,C ++ 14,C ++ 98,C ++ 99。我在哪里/如何获得/安装最新版本?
vim插件c.vim的解决方案:
编辑“c.vim / plugin / c.vim”。改变这一行
let s:C_CplusCFlags = '-Wall -g -O0 -c -std=c++11' " C++ compiler flags: compile, don't optimize
我添加了“-std = c ++ 11”并且它可以正常工作。
答案 0 :(得分:5)
range based for loop is part of C++11,因此您需要使用-std=c++11
和G ++来启用C ++ 11功能。
答案 1 :(得分:3)
如前面的答案中所述,您正在尝试使用最新C ++标准(称为C ++ 11)的功能,同时编译旧标准。 C ++ 11是最新的C ++标准,也是唯一一个基于。
的支持范围现在您需要区分C ++标准和该标准的编译器支持。 在过去几年中,对gcc编译器逐渐添加了对C ++ 11特性的支持。 以下链接显示了哪个gcc版本支持哪些C ++ 11功能:
如您所见,基于范围的是在gcc 4.6中添加的,因此您不需要gcc 4.8才能使用此功能 - gcc 4.6或更高版本就足够了。
编译时,您还需要告诉编译器要编译哪个标准。 -std = whatever告诉编译器使用哪个标准。
您当前正在使用&#34; -std = c99&#34;,告诉编译器使用旧的C ++标准进行编译。相反,您需要将此标志设置为c ++ 11。如果这不适用于您正在使用的gcc版本,请尝试使用&#34; -std = c ++ 0x&#34;相反(C ++ 0x是C ++ 11标准的旧名称。)