【发布时间】:2014-08-18 22:25:13
【问题描述】:
有人正在编译我使用 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>了吗? -
我必须这样做吗?如果需要,为什么它可以在 linux 和 windows 上运行?
-
这是包含该类型定义的标题。也许它碰巧起作用了,因为在这些平台上为您包含了其他一些标头,但这不是必需的。
-
仅仅因为您的代码在您依赖于实现细节时恰好可以工作,并不意味着代码是正确的。你有一个错误。影响可移植性的错误 - 显然如此。修理它。这就是它的全部。对于未来,您可以查看cppreference - 对于每个标准类,它会告诉您必须包含哪些标头。未能包含它并不意味着它不适用于所有平台。它可能对某些人有效。它甚至可以工作,但有一些微妙的错误会在以后咬你。你已经被警告了:)
-
@Petr:首先尝试给出一个可复制的例子。