gcc 4.8 无法识别 nullptr

Que*_*rod 3 c++ gcc c++11

在 Red Hat Linux 工作站上,我使用 devtoolset2 给出以下命令:

scl enable devtoolset-2 bash
Run Code Online (Sandbox Code Playgroud)

然后,当我调用 gcc --version 时,我得到:

gcc (GCC) 4.8.2 20140120 (Red Hat 4.8.2-15) Copyright (C) 2013 Free Software Foundation, Inc.

但是如果我编译我的程序(用cmake生成的malkefile,添加以下行:

if(UNIX)
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=c++11")
endif()
Run Code Online (Sandbox Code Playgroud)

我有以下错误消息:

cc1plus: error: unrecognized command line option "-std=c++11"
Run Code Online (Sandbox Code Playgroud)

如果我编译将 -std=c++11 替换为 -std=c++0x ,我会得到这些消息:

nullptr wasnt declared in this scope.
Run Code Online (Sandbox Code Playgroud)

考虑到 nullptr 是关键字,如何无法识别它?

我不明白,如果你有任何想法......

Lig*_*ica 5

您没有调用 GCC 4.8.2。

您的 CMake 配置有问题,或者您的 SCL 调用有问题,或者gcc -v给出了不同的答案g++ -v(在这种情况下,请检查您的工具集的内容)。

但是nullptr不可用,-std=c++0x被接受但不被接受-std=c++11,都建议 GCC 4.3、4.4 或 4.5。

您可以尝试的一件事是CMakeCache.txt从您的构建根目录中删除该文件,该文件可能包含您以前环境的缓存属性。

如果失败,请打开详细输出,以便您可以真正了解发生了什么、正在调用哪些二进制文件以及如何调用。