web-dev-qa-db-fra.com

Obtention de l'erreur: 'shared_ptr' dans l'espace de noms 'std' ne nomme pas un type

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.

14
royeet

@ 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.

1
royeet

http://fr.cppreference.com/w/cpp/memory/shared_ptr/make_shared utilisez le fichier head dans votre code.

#include <iostream>
#include <memory>
15
MYLOGOS

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
1
miravalls