我正在尝试在android studio(ndk r10d)中编译一个使用一些C ++代码的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,我宁愿使用标准实现。
答案 0 :(得分:16)
http://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared 在代码中使用头文件。
#include <iostream>
#include <memory>
答案 1 :(得分:1)
@ T.C看起来你是对的。我在寻找解决问题的方法时看到了你对另一个问题的主张,但是我正在使用的库正在使用C ++ 11和STLport进行编译,我认为这种说法可能不正确。
我认为发生的事情是我使用的库没有使用STLport缺少的任何C ++ 11功能。它们仅使用gcc编译器支持的C ++ 11功能。我需要gnuStl来支持我正在使用的功能。
我的解决方案是对智能指针和所有其他缺少的C ++ 11功能使用boost实现。
答案 2 :(得分:1)
我在这里搜寻类似的错误,但答案不起作用:
error: ‘shared_pointer’ in namespace ‘std’ does not name a template type
就我而言,这是一个错字:
std::shared_pointer
应该是
std::shared_ptr