to_string no es miembro de std, dice g++ (mingw)

Resuelto Anurag Kalia asked hace 11 años • 14 respuestas

Estoy creando un pequeño programa para recordar vocabulario en el que se me mostrarían palabras al azar en busca de significados. Quiero usar la biblioteca C++ estándar como nos dice Bjarne Stroustroup, pero me encontré con un problema aparentemente extraño desde el principio.

Quiero cambiar un longnúmero entero std::stringpara 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 --‍version), 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 la -std=c++0xbandera. ¿Qué estoy haciendo mal?

Anurag Kalia avatar Oct 19 '12 20:10 Anurag Kalia
Aceptado

Este es un error conocido en MinGW. Bugzilla relevante . En la sección de comentarios puedes conseguir un parche para que funcione con MinGW.

Este problema se solucionó 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 y 64 bits. La distribución Nuwen MinGW también resuelve este problema.

Rapptz avatar Oct 19 '2012 13:10 Rapptz
#include <string>
#include <sstream>

namespace patch
{
    template < typename T > std::string to_string( const T& n )
    {
        std::ostringstream stm ;
        stm << n ;
        return stm.str() ;
    }
}

#include <iostream>

int main()
{
    std::cout << patch::to_string(1234) << '\n' << patch::to_string(1234.56) << '\n' ;
}

no olvides incluir#include <sstream>

edgarmtze avatar Dec 31 '2013 18:12 edgarmtze

Como se sugirió, esto puede ser un problema con la versión del compilador.

Intente usar el siguiente código para convertir a longa std::string:

#include <sstream>
#include <string>
#include <iostream>

int main() {
    std::ostringstream ss;
    long num = 123456;
    ss << num;
    std::cout << ss.str() << std::endl;
}
andre avatar Oct 19 '2012 14:10 andre