Je fais un petit programme de mémorisation de vocabulaire où les mots seraient flashés sur moi au hasard pour les significations. Je veux utiliser la bibliothèque C ++ standard comme Bjarne Stroustroup nous le dit, mais j'ai rencontré un problème apparemment étrange dès la sortie de la porte.
Je veux changer un long
entier std::string
pour pouvoir le stocker dans un fichier. J'ai employé to_string()
pour le même. Le problème est que lorsque je le compile avec g ++ (version 4.7.0 comme mentionné dans son drapeau --version), il dit:
PS C:\Users\Anurag\SkyDrive\College\Programs> g++ -std=c++0x ttd.cpp
ttd.cpp: In function 'int main()':
ttd.cpp:11:2: error: 'to_string' is not a member of 'std'
Mon programme qui donne cette erreur est:
#include <string>
int main()
{
std::to_string(0);
return 0;
}
Mais, je sais que cela ne peut pas être parce que la bibliothèque msdn dit clairement qu'elle existe et qu'une question précédente sur Stack Overflow (pour g ++ version 4.5) dit qu'elle peut être activée avec le -std=c++0x
drapeau. Qu'est-ce que je fais mal?
libstdc++
est dépassé?-std=c++11
ou supérieur.Réponses:
Il s'agit d'un bogue connu sous MinGW. Bugzilla pertinent . Dans la section des commentaires, vous pouvez obtenir un patch pour le faire fonctionner avec MinGW.
Ce problème a été corrigé dans les distributions MinGW-w64 supérieures à GCC 4.8.0 fournies par le projet MinGW-w64 . Malgré son nom, le projet fournit des chaînes d'outils pour 32 bits et 64 bits. La distribution Nuwen MinGW résout également ce problème.
la source
std::to_string
au travail en installant MinGW 4.8.1 (en particulier,x32-4.8.1-posix-dwarf-rev5
) via les builds MinGW . En revanche,to_string
ne fonctionnait pas avec MinGW 4.8.1 installé via le programme d'installation "mingw-get" ou le package TDM-GCC.#define _GLIBCXX_USE_C99 1
enC:\MinGW\lib\gcc\mingw32\4.8.1\include\c++\mingw32\bits\c++config.h
comme décrit icin'oubliez pas d'inclure
#include <sstream>
la source
std::to_string(0.75)
retournera généralement"0.750000"
(le format sprintf% d par défaut) tandis que cela reviendra"0.75"
. Voir ici pour la raison: stackoverflow.com/a/13686914/785171Comme suggéré, cela peut être un problème avec votre version du compilateur.
Essayez d'utiliser le code suivant pour convertir un fichier
long
enstd::string
:la source
std::string
, vous devez utiliser à la.str()
place.std::to_string(0.75)
retournera généralement"0.750000"
(le format sprintf% d par défaut) tandis que cela reviendra"0.75"
. Voir ici pour la raison: stackoverflow.com/a/13686914/785171Utilisez cette fonction ...
la source
std::to_string(0.75)
retournera généralement"0.750000"
(le format sprintf% d par défaut) tandis que cela reviendra"0.75"
. Voir ici pour la raison: stackoverflow.com/a/13686914/785171to_string est un problème actuel avec Cygwin
Voici une nouvelle réponse à un ancien fil de discussion. Un nouveau est apparu mais a été rapidement annulé, Cygwin: g ++ 5.2: 'to_string' n'est pas membre de 'std' .
Dommage, nous aurions peut-être obtenu une réponse mise à jour. Selon @Alex, Cygwin g ++ 5.2 ne fonctionne toujours pas au 3 novembre 2015.
Le 16 janvier 2015, Corinna Vinschen, un responsable Cygwin chez Red Hat, a déclaré que le problème était une lacune de newlib. Il ne prend pas en charge la plupart des fonctions doubles longues et n'est donc pas compatible avec C99.
Red Hat est,
Le 25 octobre 2015, Corrine a également déclaré :
Nous y voilà donc. Peut-être que l'un d'entre nous qui a les connaissances et le temps peut contribuer et être le héros.
Newlib est là .
la source
Modifier la norme C ++ par défaut
De (COMPILE FICHIER ECHEC) Erreur: « to_string » est pas un membre de « std »
À (COMPILE FILE SUCCESSFUL)
Testé sur Cygwin G ++ (GCC) 5.4.0
la source
to_string () est seulement présente dans c ++ 11 donc si c ++ version est inférieure utilisent des méthodes alternatives telles que sprintf ou ostringstream
la source
Le fait est que libstdc ++ est réellement pris
std::to_string
en charge dans les cibles * -w64-mingw32 depuis la version 4.8.0 . Cependant, cela n'inclut pas la prise en charge de MinGW.org, Cygwin et des variantes (par exemple * -pc-msys de MSYS2). Voir également https://cygwin.com/ml/cygwin/2015-01/msg00245.html .J'ai implémenté une solution de contournement avant la résolution du bogue pour MinGW-w64. Étant différent du code dans d'autres réponses, c'est une imitation de libstdc ++ (si possible). Il ne nécessite pas de construction de flux de chaînes mais dépend des extensions libstdc ++. Même maintenant, j'utilise des cibles mingw-w64 sous Windows, cela fonctionne toujours bien pour plusieurs autres cibles (tant que les
long double
fonctions ne sont pas utilisées).la source
Si vous vous demandez pourquoi cela se produit sur Android, c'est probablement parce que vous utilisez une mauvaise bibliothèque standard c ++. Essayez de changer la bibliothèque c ++ dans votre build.gradle de
gnustl_static
àc++_static
et la norme c ++ dans votre CMakeLists.txt de-std=gnu++11
à-std=c++11
la source
Si nous utilisons un template-light-solution (comme indiqué ci-dessus) comme suit:
Malheureusement, nous aurons des problèmes dans certains cas. Par exemple, pour les membres const stat :
hpp
cpp
Et reliant:
Voici une façon de résoudre le problème (ajoutez au type size_t ):
HTH.
la source
dans les blocs de code, allez dans setting -> compiler setting -> compiler flag -> select std c ++ 11 done. J'ai eu le même problème ... maintenant ça marche!
la source
Cela m'est aussi arrivé, je viens d'écrire une fonction rapide plutôt que de me soucier de mettre à jour mon compilateur.
la source
ones_char = '0' + number % 10;