Estoy haciendo un pequeño programa de recordatorio de vocabulario en el que las palabras me sonarían al azar en busca de significados. Quiero usar la biblioteca estándar de C ++ como nos dice Bjarne Stroustroup, pero me he encontrado con un problema aparentemente extraño desde el principio.
Quiero cambiar un long
número entero std::string
para poder almacenarlo en un archivo. He empleado to_string()
para lo mismo. El problema es que cuando lo compilo con g ++ (versión 4.7.0 como se menciona en su indicador de versión --), dice:
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'
Mi programa que da este error es:
#include <string>
int main()
{
std::to_string(0);
return 0;
}
Pero sé que no puede ser porque la biblioteca msdn dice claramente que existe y una pregunta anterior sobre Stack Overflow (para g ++ versión 4.5) dice que se puede activar con el -std=c++0x
indicador. ¿Qué estoy haciendo mal?
libstdc++
está desactualizado?-std=c++11
o superior.Respuestas:
Este es un error conocido en MinGW. Relevante Bugzilla . En la sección de comentarios puede obtener un parche para que funcione con MinGW.
Este problema se ha solucionado en distribuciones MinGW-w64 superiores a GCC 4.8.0 proporcionadas por el proyecto MinGW-w64 . A pesar del nombre, el proyecto proporciona cadenas de herramientas para 32 bits junto con 64 bits. La distribución Nuwen MinGW también resuelve este problema.
fuente
std::to_string
a trabajar instalando MinGW 4.8.1 (específicamentex32-4.8.1-posix-dwarf-rev5
) a través de MinGW-builds . Por el contrario,to_string
lo hizo no trabajo con MinGW 4.8.1 instalado ya sea a través del instalador "MinGW-get" o el paquete TDM-CCG.#define _GLIBCXX_USE_C99 1
enC:\MinGW\lib\gcc\mingw32\4.8.1\include\c++\mingw32\bits\c++config.h
como se describe aquíno te olvides de incluir
#include <sstream>
fuente
std::to_string(0.75)
generalmente regresará"0.750000"
(el formato predeterminado sprintf% d) mientras que esto regresará"0.75"
. Consulte aquí por motivos: stackoverflow.com/a/13686914/785171Como se sugirió, esto puede ser un problema con su versión del compilador.
Intente usar el siguiente código para convertir un
long
astd::string
:fuente
std::string
, quieres usarlo.str()
en su lugar.std::to_string(0.75)
generalmente regresará"0.750000"
(el formato predeterminado sprintf% d) mientras que esto regresará"0.75"
. Consulte aquí por motivos: stackoverflow.com/a/13686914/785171Use esta función ...
fuente
std::to_string(0.75)
generalmente regresará"0.750000"
(el formato predeterminado sprintf% d) mientras que esto regresará"0.75"
. Consulte aquí por motivos: stackoverflow.com/a/13686914/785171to_string es un problema actual con Cygwin
Aquí hay una respuesta nueva a un hilo viejo. Apareció uno nuevo pero fue anulado rápidamente, Cygwin: g ++ 5.2: 'to_string' no es miembro de 'std' .
Lástima, tal vez habríamos recibido una respuesta actualizada. Según @Alex, Cygwin g ++ 5.2 todavía no funciona a partir del 3 de noviembre de 2015.
El 16 de enero de 2015, Corinna Vinschen, mantenedora de Cygwin en Red Hat, dijo que el problema era una deficiencia de newlib. No admite la mayoría de las funciones dobles largas y, por lo tanto, no es compatible con C99.
Red Hat es,
El 25 de octubre de 2015, Corrine también dijo :
Así que ahí lo tenemos. Tal vez uno de nosotros que tenga el conocimiento y el tiempo, pueda contribuir y ser el héroe.
Newlib está aquí .
fuente
Cambiar el estándar predeterminado de C ++
A partir de (ARCHIVO COMPILE no) de error: 'to_string' no es un miembro de 'STD'
Para (COMPILAR ARCHIVO EXITOSO)
Probado en Cygwin G ++ (GCC) 5.4.0
fuente
to_string () solo está presente en c ++ 11, por lo que si la versión de c ++ es menor, use algunos métodos alternativos como sprintf u ostringstream
fuente
El hecho es que libstdc ++ realmente es compatible
std::to_string
con los objetivos * -w64-mingw32 desde 4.8.0 . Sin embargo, esto no incluye soporte para MinGW.org, Cygwin y variantes (por ejemplo, * -pc-msys de MSYS2). Consulte también https://cygwin.com/ml/cygwin/2015-01/msg00245.html .He implementado una solución antes de que el error se resolviera para MinGW-w64. Al ser diferente al código en otras respuestas, esto es una imitación de libstdc ++ (como sea posible). No requiere construcción de secuencia de cadena, pero depende de las extensiones libstdc ++. Incluso ahora estoy usando objetivos mingw-w64 en Windows, todavía funciona bien para varios otros objetivos (siempre que
long double
no se utilicen funciones).fuente
Para cualquiera que se pregunte por qué sucede esto en Android, probablemente sea porque está utilizando una biblioteca estándar de C ++ incorrecta. Intente cambiar la biblioteca de c ++ en su build.gradle de
gnustl_static
ac++_static
y el estándar de c ++ en su CMakeLists.txt de-std=gnu++11
a-std=c++11
fuente
Si usamos una solución de plantilla ligera (como se muestra arriba) como la siguiente:
Lamentablemente, tendremos problemas en algunos casos. Por ejemplo, para constante estática miembros :
hpp
cpp
Y vinculando:
Aquí hay una forma de resolver el problema (agregar al tipo size_t ):
HTH
fuente
en bloques de código vaya a configuración -> configuración del compilador -> bandera del compilador -> seleccione std c ++ 11 hecho. Tuve el mismo problema ... ¡ahora está funcionando!
fuente
Esto también me sucedió a mí, simplemente escribí una función rápida en lugar de preocuparme por actualizar mi compilador.
fuente
ones_char = '0' + number % 10;