J'essaie de compiler une application Android dans un studio Android (ndk r10d) qui utilise du code C++. J'avais besoin de C++ 11 et j'ai donc ajouté -std=gnu++11
(j'ai besoin de gnu++11
au lieu de c++11
pour une extension que j'utilise). J'utilise stlport stl, car d'autres bibliothèques que j'utilise utilisent cette bibliothèque stl . Ainsi, mes paramètres cFlags et stl dans le fichier build.gradle ressemblent à ceci:
stl "stlport_static"
cFlags " mylib1.a mylib2.a ... -fexceptions -frtti -std=gnu++11"
J'ai aussi inclus la mémoire: #include <memory>
En essayant de compiler je reçois cette erreur:
'shared_ptr' in namespace 'std' does not name a type
J'utilisais jusqu'à présent l'implémentation boost pour les pointeurs intelligents, mais avec le passage à c ++ 11, je préférerais utiliser l'implémentation standard.
@ T.C On dirait que tu avais raison. J'ai vu votre revendication sur une question différente tout en cherchant une solution à mon problème, mais comme les bibliothèques que j'utilise compilent avec C++ 11 et STLport, j'ai pensé que cette revendication pourrait ne pas être vraie.
Je pense que ce qui s'est passé est que les bibliothèques que j'utilise n'utilisent aucune des fonctionnalités C++ 11 manquantes dans STLport. Ils utilisent uniquement les fonctionnalités C++ 11 prises en charge par le compilateur gcc. J'ai besoin de gnuStl pour prendre en charge les fonctionnalités que j'utilise.
Ma solution consistait à utiliser l'implémentation boost pour les pointeurs intelligents et toutes les autres fonctionnalités manquantes de C++ 11.
http://fr.cppreference.com/w/cpp/memory/shared_ptr/make_shared utilisez le fichier head dans votre code.
#include <iostream>
#include <memory>
Je suis arrivé ici à Google pour une erreur similaire, mais la réponse n'a pas fonctionné:
error: ‘shared_pointer’ in namespace ‘std’ does not name a template type
Dans mon cas, c'était une faute de frappe:
std::shared_pointer
devrait être
std::shared_ptr