“make_unique”不是“std”的成员

Luk*_*uke 4 c++ g++ cmake c++17

我在 Linux Mint 19.2 上使用 g++-9 和 c++17。编译器实际上是告诉我将其包含<memory>在我已经包含它的位置附近:

\n\n
/home/luke/workspace/crab/Src/Brain/EpisodicMemory.cpp:2:1: note: \xe2\x80\x98std::make_unique\xe2\x80\x99 is defined in header \xe2\x80\x98<memory>\xe2\x80\x99; did you forget to \xe2\x80\x98#include <memory>\xe2\x80\x99?\n    1 | #include "EpisodicMemory.h"\n  +++ |+#include <memory>\n    2 | #include <memory>\n
Run Code Online (Sandbox Code Playgroud)\n\n

我可以用这个最小的例子产生错误:

\n\n
#include <memory>\nint main(int argc, char** argv) {\n    std::unique_ptr<int> test = std::make_unique<int>(4);\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

实在不知道怎么回事。

\n\n

这是我的 CMakeLists.txt (因为你不相信我正在使用 c++17):

\n\n
cmake_minimum_required(VERSION 3.10)\nproject(crab)\nfind_package(Qt5Widgets)\nset(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -Wall -O0 -g -fsanitize=address -std=c++17 -fPIC")\nset(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")\ninclude_directories(${Qt5Widgets_INCLUDE_DIRS})\n#file(GLOB BRAIN_FILES Brain/*.cpp Brain/*.h)\n#add_executable(crab ${BRAIN_FILES} main.cpp)\nadd_executable(crab main.cpp)\ntarget_link_libraries(crab Qt5::Widgets)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我认为链接 Qt 可能会改变我的编译器设置,但我不知道为什么会发生这种情况

\n

Luk*_*uke 7

我通过用 set(CMAKE_CXX_STANDARD 17) 替换 -std=c++17 来修复它