Reputation: 849
I am trying to compile an android application in android studio (ndk r10d) which uses some C++ code. I needed C++11 so I added -std=gnu++11
(I need gnu++11
instead of c++11
for an extension I am using). I am using the stlport stl, due to other libraries I am using that use this stl library.
So my cFlags and stl parameters in the build.gradle file looks like this:
stl "stlport_static"
cFlags " mylib1.a mylib2.a ... -fexceptions -frtti -std=gnu++11"
I also have included memory: #include <memory>
When trying to compile I receive this error:
'shared_ptr' in namespace 'std' does not name a type
I have been using the boost implementation for the smart pointers till now but with the move to c++11 I would rather use the standard implementation.
Upvotes: 27
Views: 63519
Reputation: 681
http://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared use head file in your code.
#include <memory>
Upvotes: 49
Reputation: 365
I got here googling for a similar error, but the answer did not work:
error: ‘shared_pointer’ in namespace ‘std’ does not name a template type
In my case, it was a typo:
std::shared_pointer
should be
std::shared_ptr
Upvotes: 1
Reputation: 849
@T.C Looks like you were right. I saw your claim on a different question while looking for a solution for my problem, but as libraries that I am using are compiling with C++11 and STLport I thought that this claim might not be true.
What I think happened is that the libraries I'm using are not using any C++11 features that the STLport is missing. They are only using C++11 features that the gcc compiler supports. I need the gnuStl to support the features that I am using.
My solution was to use the boost implementation for the smart pointers and all other missing C++11 features.
Upvotes: 2