【问题标题】:Getting error: 'shared_ptr' in namespace 'std' does not name a type出现错误:命名空间“std”中的“shared_ptr”未命名类型
【发布时间】:2015-05-08 23:57:14
【问题描述】:

我正在尝试在使用一些 C++ 代码的 android studio (ndk r10d) 中编译一个 android 应用程序。我需要 C++11,所以我添加了 -std=gnu++11(对于我正在使用的扩展,我需要 gnu++11 而不是 c++11)。我正在使用 stlport stl,因为我使用的其他库使用了这个 stl 库。 所以我在 build.gradle 文件中的 cFlags 和 stl 参数看起来像这样:

stl "stlport_static"
cFlags " mylib1.a mylib2.a ... -fexceptions -frtti -std=gnu++11"

我也加入了内存:#include <memory>

尝试编译时收到此错误:

'shared_ptr' in namespace 'std' does not name a type

到目前为止,我一直在使用智能指针的 boost 实现,但随着迁移到 c++11,我宁愿使用标准实现。

【问题讨论】:

  • 导致错误的实际代码是什么?
  • 原始错误出现在我添加以缩短代码的定义上,但在我尝试使用此宏的所有文件中都可以看到错误:#define myapp_shared_ptr std::shared_ptr
  • shared_ptr 没有命名类型。它命名了一个类型模板。你确定你在使用它时正在做 shared_ptr 吗?当我离开时,我得到的错误是“使用类模板需要模板参数”
  • 我认为 STLport 没有 C++11 特性。

标签: android c++11 android-studio stlport


【解决方案1】:

http://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared 在代码中使用头文件。

#include <memory>

【讨论】:

  • 这有必要吗?
  • 我遇到了同样的问题,使用 stlport_static 时在 中没有定义 shared_ptr。这个答案毫无意义。
  • #include 为我工作。该标准说它是在 中定义的
  • 对我来说,这对于 Linux 上的 g++ 是必需的,但在 Windows 上不是 msvc。
  • 你不需要上面的,只需要
【解决方案2】:

@T.C 看起来你是对的。在为我的问题寻找解决方案时,我看到了您对另一个问题的主张,但是由于我正在使用的库是用 C++11 和 STLport 编译的,所以我认为这种主张可能不正确。

我认为发生的事情是我正在使用的库没有使用 STLport 缺少的任何 C++11 功能。他们只使用 gcc 编译器支持的 C++11 功能。我需要 gnuStl 来支持我正在使用的功能。

我的解决方案是对智能指针和所有其他缺少的 C++11 功能使用 boost 实现。

【讨论】:

  • 是的,GNU STL 支持所有 C++11 特性。
【解决方案3】:

我在谷歌上搜索了一个类似的错误,但答案没有用:

error: ‘shared_pointer’ in namespace ‘std’ does not name a template type

就我而言,这是一个错字:

std::shared_pointer

应该是

std::shared_ptr

【讨论】:

    猜你喜欢
    • 2017-12-08
    • 1970-01-01
    • 2013-05-27
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    • 2015-03-12
    相关资源
    最近更新 更多