命名空间“std”中没有名为“make_unique”的成员

Posted

技术标签:

【中文标题】命名空间“std”中没有名为“make_unique”的成员【英文标题】:no member named 'make_unique' in namespace 'std' 【发布时间】:2017-09-14 08:34:53 【问题描述】:

我使用的是 cmake 3.9.2,我的 CMakeLists.txt 中有以下几行:

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_FLAGS "$CMAKE_CXX_FLAGS -g -Wall")

我也使用 clang 4.0 作为我的编译器,我的操作系统是 Ubuntu Trusty。在安装 clang 时,我添加了以下存储库:

deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-4.0 main
deb-src http://apt.llvm.org/trusty/ llvm-toolchain-trusty-4.0 main
ppa:ubuntu-toolchain-r/test

并运行命令:

# apt-get install clang-4.0 libstdc++6 libc++1

毕竟我仍然收到错误

error: no member named 'make_unique' in namespace 'std'

同时在我的 OS X 10.11 上,一切都可以顺利构建和运行。在 Ubuntu Zesty 上我也没有任何问题。我在 Ubuntu Trusty 上做错了什么?

【问题讨论】:

包括<memory>? @RickAstley 是的,包括在内 您的 CXX_FLAGS 很可能有问题。我的猜测是它们链接到 C++11(即 -std=c++11)而不是 C++14(即 -std=c++14),其中引入了 std::make_unique。 @101010 我跑了make VERBOSE=1,我得到了/usr/bin/clang++-4.0 -I/project_path/../. -g -Wall -stdlib=libstdc++ -std=c++14 -O3 -DNDEBUG -std=gnu++14 -m64 -o CMakeFiles/.../file.cpp @CaptainRR 删除 -std=gnu++14-o 放错地方 【参考方案1】:

看来我解决了这个问题。我需要安装libc++-dev 并确保-stdlib=libc++ 在命令行中。

【讨论】:

以上是关于命名空间“std”中没有名为“make_unique”的成员的主要内容,如果未能解决你的问题,请参考以下文章

命名空间“std”中没有名为“make_unique”的成员

错误:命名空间“std”中没有名为“remove_cv_t”的模板;你是说'remove_cv'吗?

错误:命名空间“std”中没有名为“enable_if_t”的模板;你是说'enable_if'吗?

命名空间“std”中没有名为“hardware_constructive_interference_size”的成员

c++中命名空间std的函数都有哪些

02C++namespace命名空间