簡體   English   中英

無法編譯C ++ file.cpp。 C ++ 98模式

[英]Can't compile C++ file.cpp. C++98 mode

我是C ++的新手。 當我寫

for (char* c : v)
{
    cout << c;
}

我懂了

“在C ++ 98模式下不允許基於范圍的'for'循環”

據我了解,我必須更改我的GCC版本(或僅更改模式?)。 我的g++ -v

使用內置規格。 COLLECT_GCC = g ++ COLLECT_LTO_WRAPPER = / usr / lib / gcc / i686-linux-gnu / 4.7 / lto-wrapper目標:i686-linux-gnu配置為:../src/configure -v --with-pkgversion ='Ubuntu / Linaro 4.7.2-2ubuntu1'--with-bugurl = file:///usr/share/doc/gcc-4.7/README.Bugs --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唯一對象--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 program.cpp

我已經下載了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”,它可以正常工作。

基於范圍的for循環是C ++ 11的一部分 ,因此您需要將-std=c++11與G ++結合使用以啟用C ++ 11功能。

如上一個答案中所述,您嘗試在編譯較舊的標准時使用最新的C ++標准(稱為C ++ 11)的功能。 C ++ 11是最新的C ++標准,也是唯一的支持范圍。

現在,您需要區分C ++標准和對該標准的編譯器支持。 在過去的幾年中,gcc編譯器逐漸增加了對C ++ 11功能的支持。 以下鏈接顯示了哪個gcc版本支持哪種C ++ 11功能:

GCC中的C ++ 0x / C ++ 11支持

如您所見,基於范圍是在gcc 4.6中添加的,因此您不需要gcc 4.8即可使用此功能-gcc 4.6或更高版本就足夠了。

編譯時,您還需要告訴編譯器要針對哪個標准進行編譯。 -std = whatever告訴編譯器使用哪個標准。

您當前正在使用“ -std = c99”,告訴編譯器使用舊的C ++標准進行編譯。 相反,您需要將此標志設置為c ++ 11。 如果這在您使用的gcc版本上不起作用,請嘗試改用“ -std = c ++ 0x”(C ++ 0x是C ++ 11標准的舊名稱。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM