命名空间“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'吗?