setup portable instalar compiler como c++ gcc mingw

c++ - portable - std:: stoi no existe en g++ 4.6.1 en MinGW



mingw portable (4)

Esto es el resultado de una declaración no estándar de vswprintf en Windows. La biblioteca estándar de GNU define _GLIBCXX_HAVE_BROKEN_VSWPRINTF en esta plataforma, lo que a su vez desactiva las funciones de conversión que está intentando usar. Puedes leer más sobre este tema y macro aquí: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37522 .

Si está dispuesto a modificar los archivos de cabecera distribuidos con MinGW, puede !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF) este problema eliminando la macro !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF) en la línea 2754 de .../lib/gcc/mingw32/4.6.1/include/c++/bits/basic_string.h , y volver a agregarlo a las líneas 2905 a 2965 (las líneas que hacen referencia a std::vswprintf ). No podrá usar las funciones std::to_wstring , pero muchas de las otras funciones de conversión deberían estar disponibles.

Intenté compilar este sencillo programa en IdeOne (que usa gcc 4.5.1) y en mi computadora Linux (que usa algo como 4.6.4):

#include <string> #include <iostream> int main() { std::cout << std::stoi("32") << std::endl; }

Y compila perfectamente y produce 32 . Sin embargo, cuando intento compilarlo en mi computadora Windows con MinGW y gcc 4.6.1, aparece este error:

test.cpp: In function ''int main()'': test.cpp:5:19: error: ''stoi'' is not a member of ''std''

Lo mismo ocurre con std::stoul , etc. ¿ std::stoi y familia no existen en MinGW por algún motivo? Pensé que gcc en MinGW (sh | w) debería comportarse igual que en Linux.


Esto se soluciona en MinGW-w64 , una bifurcación del proyecto MinGW original que realmente está interesado en corregir errores como este. Se corrigió a partir de g ++ 4.9.2, y tal vez antes.

Nota: para las personas que vienen aquí que han hecho una instalación predeterminada de CodeBlocks (que viene con el MinGW viejo y roto) y desean actualizar el compilador, consulte esta respuesta .

Puede usar cualquier compilación de MinGW-w64: utilizo el auto instalador de mingw-builds.org, mientras que esa respuesta usa TDM-GCC-64. Si desea compilación tanto de 64 bits como de 32 bits, necesita instalar y agregar 2 nuevos compiladores: mingw-w64 de 64 bits y mingw-w64 de 32 bits. NO es compatible con el uso de una instalación de g ++ con el -m32 o -m64 para alternar.


Estoy usando MinGW 4.9.3-1. Este problema parece estar todavía ahí. Como solución alternativa, utilicé la otra forma de obtener enteros a partir de cadenas.

int rows, columns; sscanf(argv[1], "%d", &rows); sscanf(argv[2], "%d", &columns);


Usa Mingw-w64. Tuve este mismo problema y el uso de Mingw-w64 funcionó para mí.