无法编译C ++ file.cpp。 C ++ 98模式

时间:2013-09-21 23:32:06

标签: c++ ubuntu gcc vim c++98

我是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.cppgcc -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”并且它可以正常工作。

2 个答案:

答案 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功能:

C++0x/C++11 Support in GCC

如您所见,基于范围的是在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标准的旧名称。)