'make_unique'不是'std'的成员

时间:2019-08-24 14:14:19

标签: c++ cmake g++ c++17

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

/home/luke/workspace/crab/Src/Brain/EpisodicMemory.cpp:2:1: note: ‘std::make_unique’ is defined in header ‘<memory>’; did you forget to ‘#include <memory>’?
    1 | #include "EpisodicMemory.h"
  +++ |+#include <memory>
    2 | #include <memory>

我可以通过以下最小示例产生错误:

#include <memory>
int main(int argc, char** argv) {
    std::unique_ptr<int> test = std::make_unique<int>(4);
    return 0;
}

真的不知道发生了什么事。

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

cmake_minimum_required(VERSION 3.10)
project(crab)
find_package(Qt5Widgets)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -Wall -O0 -g -fsanitize=address -std=c++17 -fPIC")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")
include_directories(${Qt5Widgets_INCLUDE_DIRS})
#file(GLOB BRAIN_FILES Brain/*.cpp Brain/*.h)
#add_executable(crab ${BRAIN_FILES} main.cpp)
add_executable(crab main.cpp)
target_link_libraries(crab Qt5::Widgets)

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

1 个答案:

答案 0 :(得分:0)

我通过将-std = c ++ 17替换为set(CMAKE_CXX_STANDARD 17)来修复了该问题