GNU C++: unique_ptr.h 没有这样的文件或目录

GNU C++: unique_ptr.h no such file or directory

本文关键字:文件 C++ unique ptr GNU      更新时间:2023-10-16

我正在从Linux机器(Kubuntu 16.05(,g++ 5.4.0 64位交叉编译一些代码。使用 Code Lite IDE 作为开发环境。 我有几行代码,我在其中初始化唯一的指针

std::make_unique

编译器抱怨错误:

错误:"make_unique"不是"std"的成员

我试图在标题中添加<memory><unique_ptr.h>。然后编译器抱怨它找不到<unique_ptr.h>文件。有趣的是,当我单击以从编辑器中打开文件时,它会被发现并打开。该文件位于/usr/include/c++/5/bits/unique_ptr.h

我确保构建代码的编译器版本确实是 5.4,所以我不明白为什么它不支持开箱即用unique_ptr。我确保启用 C++11 和 C++14 标志:

-g;-O0;-std=c++14;-std=c++11;-Wall

另外,在包含中,我添加了/用户/包含

我在这里错过了什么?我是否必须在项目中显式包含/usr/include/c++/5/bits/目录?

试试这些标志:-g -O0 -std=c++14 -Wall. 请注意,分隔标志不需要分号。

编译器将采用最新的-std条目,因此您有效地使用 C++11 而不是 C++14 进行编译。

正如您在这里看到的,在较新的标准禁用第一个声明的标准后启用-std=c++11。仅启用 C++14 就足够了。

>C++11引入了std::unique_ptr,但没有std::make_unique(这打破了shared_ptr/make_shared的"对称性"(。

他们在C++14中修复了这个问题,并添加了std::make_unique.

因此,如果在 C++11 模式下编译代码,则无法使用std::make_unique

正如其他人已经指出的那样,您需要使用-std编译器选项设置最新的C++ 标准; 在这种情况下,-std=c++14也启用std::make_unique