【问题标题】:GNU C++: unique_ptr.h no such file or directoryGNU C++:unique_ptr.h 没有这样的文件或目录
【发布时间】:2017-08-24 09:53:49
【问题描述】:

我在 Linux 机器 (Kubuntu 16.05),g++ 5.4.0 64bit 上交叉编译一些来自 Windows 的代码。使用 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

另外,在包含我添加 /user/include

我在这里缺少什么?我必须在项目中明确包含/usr/include/c++/5/bits/ 目录吗?

【问题讨论】:

  • 如何设置标志?通过启用 C++11,您可能会禁用 C++14。
  • 天啊,我现在感觉好傻。 @juanchopanza 你是对的。我从编译器选项中删除了 c++11,问题就消失了。 Code Lite 允许检查支持哪些 c++ 标准。我一直认为这些标准中的每一个都支持标准的特定功能:/ 谢谢!

标签: c++ linux gcc g++ c++14


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    如您所见,HERE 在较新的标准禁用了第一个声明的标准后启用了-std=c++11。只启用 C++14 就足够了。

    【讨论】:

      【解决方案3】:

      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 启用 also std::make_unique

      【讨论】:

        猜你喜欢
        • 2015-05-17
        • 2013-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-22
        • 1970-01-01
        • 2021-06-24
        • 2016-03-29
        相关资源
        最近更新 更多