使用-std = c ++ 0x时未声明nullptr

时间:2018-03-10 19:20:47

标签: c++ gcc compiler-errors g++ nullptr

许多其他问题解决了类似的问题,但我还没有找到这个具体问题的答案。我收到以下错误:

error: ‘nullptr’ was not declared in this scope

使用以下命令进行编译时:

g++ -std=gnu++0x file1.cpp file2.cpp file3.cpp file4.cpp -o test.out

g ++版本是4.4.7,遗憾的是无法更新。这是我的系统信息:

LSB Version:    :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: RedHatEnterpriseWorkstation
Description:    Red Hat Enterprise Linux Workstation release 6.9 (Santiago)
Release:    6.9
Codename:   Santiago

请注意,我的程序在带有-std=c++11标志的MacOS High Sierra版本10.13上编译正常,这在Linux机器上不可用。如果可能的话,我宁愿不填充nullptr

修改

我再说一遍,添加-std=c++0x标志不工作。它适用于MacOS,但不适用于Linux机器。这就是问题,为什么这与我在SO上看到的类似问题不一样。

4 个答案:

答案 0 :(得分:4)

查看feature list of GCC,它清楚地显示:

  

空指针常量| N2431 | GCC 4.6

这意味着nullptr已在GCC 4.6中实施。 GCC 4.4.7尚不支持它,没有标志可以解决这个问题。如果要使用它,则必须更新编译器。

答案 1 :(得分:3)

似乎4.4.7不支持nullptr,但使用GCC 4.6.0:http://gcc.gnu.org/gcc-4.6/changes.html 您可以尝试使用NULL而不是nullptr

答案 2 :(得分:2)

错误的特定性质(它认为它是需要定义的标识符,而不是关键字)清楚地表明您的GCC版本根本不支持该C ++ 11功能。

没有办法处理这个不涉及更改编译器的问题。您无法有效地模拟此功能(因为如果可以的话,它首先不需要成为语言功能)。因此,如果您无法更新编译器,则无法运行期望实现所有C ++ 11的代码。

答案 3 :(得分:0)

您可以使用Developer Toolset (DTS)来获得与Red Hat Enterprise Linux 6系统库兼容的C ++ 11编译器。系统编译器只支持非常有限的C ++ 11,因为它太旧了 - GCC 4.4的第一个版本于2009年发布。