使用 -std=c++0x 时未声明 nullptr
nullptr not declared when using -std=c++0x
许多其他问题解决了类似的问题,但我还没有找到这个特定问题的答案。我收到以下错误:
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 机器上不可用。如果可能的话,我宁愿不要 polyfill nullptr
。
编辑
我重复一遍,添加 -std=c++0x
标志 不起作用 。它适用于 MacOS,但不适用于 Linux 机器。这就是问题所在,为什么这与我在 SO 上看到的类似问题不同。
错误的具体性质(它认为它是一个需要定义的标识符,而不是关键字)清楚地表明您的 GCC 版本根本不支持 C++11功能。
没有不涉及更改编译器的处理方法。您无法有效地模拟此功能(因为如果可以的话,它一开始就不需要成为语言功能)。所以如果你不能更新你的编译器,你就不能 运行 期望所有 C++11 都被实现的代码。
查看 feature list of GCC 它清楚地表明:
Null pointer constant | N2431 | GCC 4.6
这意味着 nullptr
是在 GCC 4.6 中实现的。 GCC 4.4.7 还不支持它,没有标志可以解决这个问题。如果你想使用它,你将不得不更新你的编译器。
似乎 4.4.7 不支持 nullptr,但 GCC 4.6.0 支持:http://gcc.gnu.org/gcc-4.6/changes.html
您可以尝试使用 NULL 而不是 nullptr
您可以使用 Developer Toolset (DTS) 获得与 Red Hat Enterprise Linux 6 系统库兼容的 C++11 编译器。系统编译器对 C++11 的支持非常有限,只是因为它太旧了——GCC 4.4 的第一个版本于 2009 年发布。
许多其他问题解决了类似的问题,但我还没有找到这个特定问题的答案。我收到以下错误:
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 机器上不可用。如果可能的话,我宁愿不要 polyfill nullptr
。
编辑
我重复一遍,添加 -std=c++0x
标志 不起作用 。它适用于 MacOS,但不适用于 Linux 机器。这就是问题所在,为什么这与我在 SO 上看到的类似问题不同。
错误的具体性质(它认为它是一个需要定义的标识符,而不是关键字)清楚地表明您的 GCC 版本根本不支持 C++11功能。
没有不涉及更改编译器的处理方法。您无法有效地模拟此功能(因为如果可以的话,它一开始就不需要成为语言功能)。所以如果你不能更新你的编译器,你就不能 运行 期望所有 C++11 都被实现的代码。
查看 feature list of GCC 它清楚地表明:
Null pointer constant | N2431 | GCC 4.6
这意味着 nullptr
是在 GCC 4.6 中实现的。 GCC 4.4.7 还不支持它,没有标志可以解决这个问题。如果你想使用它,你将不得不更新你的编译器。
似乎 4.4.7 不支持 nullptr,但 GCC 4.6.0 支持:http://gcc.gnu.org/gcc-4.6/changes.html 您可以尝试使用 NULL 而不是 nullptr
您可以使用 Developer Toolset (DTS) 获得与 Red Hat Enterprise Linux 6 系统库兼容的 C++11 编译器。系统编译器对 C++11 的支持非常有限,只是因为它太旧了——GCC 4.4 的第一个版本于 2009 年发布。