macos - 命名空间 'nullptr_t' 中没有名为 'std' 的类型

标签 macos qt gcc c++11

有人正在编译我使用 C++11 的 Qt 程序标准,他们得到了这个错误(Mac OS X/gcc)。我知道我可以声明它,但它不应该已经在 <cstddef> 中了吗? ?

./collectable_smartptr.hpp:54:33: error: no type named 'nullptr_t' in namespace 'std'
void operator=(std::nullptr_t &null)

这段代码在 Windows 和 Linux 上工作得很好,我只在 Mac 上看到它。

Mac是i386-apple-darwin11.3.0,编译器是:
$ g++ --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.2.0
Thread model: posix

g++ 选项(一些)是 -c -pipe -std=c++11 -O2 -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5 -Wall -W -DQT_USE_QSTRINGBUILDER -DQT_NO_DEBUG -DQT_WEBKIT_LIB -DQT_XML_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED
这是正常的吗?或者是否需要在 Mac 上做一些额外的事情才能使 C++11 工作?

最佳答案

明确包含内容总是更好,因此,我会将其添加到代码中:

#include <cstddef>

如果这不起作用,则意味着您的系统存在根本问题,即:
  • 您没有使用足够新的标准库实现(例如尝试 libc++)。
  • 您没有启用 C++11 和编译。

  • 作为一种快速而讨厌的解决方法,您当然可以自己进行 typedef,如下所示:
    namespace std {
        typedef decltype(nullptr) nullptr_t;
    }
    

    或没有 std ,但这真的应该是最后的手段,通常这意味着你做错了什么。

    关于macos - 命名空间 'nullptr_t' 中没有名为 'std' 的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24458099/

    相关文章:

    c - 最小 C 程序中对 "main"的 undefined reference

    ios - Swift:如何编写采用可选序列类型的枚举变体

    macos - Applescript - 获取元素的坐标

    c++ - 哪些 Windows 编译器支持 <future> 类

    c++ - 如何在 QListWidget 项目中使用不同的图标

    gcc - x86-64 汇编语言中的 ELF 共享对象

    java - 如何从我的网络服务器编辑用户文件系统上的文件?

    cocoa - 我在哪里可以找到 MacOS 上的关键等效字符串列表

    python - 如何阻止qt应用程序卡住主程序?

    linux -/usr/bin/ld : attempted static link of dynamic object `/usr/lib64/libm.so'