Estou fazendo um pequeno programa de recordação de vocabulário, onde as palavras seriam mostradas aleatoriamente para mim em busca de significados. Eu quero usar a biblioteca C ++ padrão, como Bjarne Stroustroup nos diz, mas encontrei um problema aparentemente estranho logo de cara.
Eu quero alterar um long
número inteiro std::string
para poder armazená-lo em um arquivo. Eu trabalhei to_string()
para o mesmo. O problema é que, quando eu o compilo com o g ++ (versão 4.7.0, conforme mencionado no sinalizador --version), ele diz:
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'
Meu programa que fornece esse erro é:
#include <string>
int main()
{
std::to_string(0);
return 0;
}
Mas sei que não pode ser porque a biblioteca msdn diz claramente que existe e uma pergunta anterior no Stack Overflow (para g ++ versão 4.5) diz que pode ser ativada com o -std=c++0x
sinalizador. O que estou fazendo de errado?
libstdc++
esteja desatualizado?-std=c++11
ou superior.Respostas:
Este é um bug conhecido no MinGW. Bugzilla relevante . Na seção de comentários, você pode obter uma patch para fazê-lo funcionar com o MinGW.
Esse problema foi corrigido nas distros do MinGW-w64 superiores ao GCC 4.8.0 fornecido pelo projeto MinGW-w64 . Apesar do nome, o projeto fornece cadeias de ferramentas para 32 bits e 64 bits. A distribuição Nuwen MinGW também resolve esse problema.
fonte
std::to_string
a trabalhar instalando o MinGW 4.8.1 (especificamentex32-4.8.1-posix-dwarf-rev5
) por meio do MinGW-builds . Em contraste,to_string
fez não trabalho com MinGW 4.8.1 instalado, quer através do instalador "mingw-get" ou o pacote TDM-GCC.#define _GLIBCXX_USE_C99 1
emC:\MinGW\lib\gcc\mingw32\4.8.1\include\c++\mingw32\bits\c++config.h
como descrito aquinão esqueça de incluir
#include <sstream>
fonte
std::to_string(0.75)
geralmente retornará"0.750000"
(o formato sprintf% d padrão) enquanto isso retornará"0.75"
. Veja aqui por motivo: stackoverflow.com/a/13686914/785171Conforme sugerido, isso pode ser um problema com sua versão do compilador.
Tente usar o seguinte código para converter um
long
emstd::string
:fonte
std::string
, deseja usá-lo.str()
.std::to_string(0.75)
geralmente retornará"0.750000"
(o formato sprintf% d padrão) enquanto isso retornará"0.75"
. Veja aqui por motivo: stackoverflow.com/a/13686914/785171Use esta função ...
fonte
std::to_string(0.75)
geralmente retornará"0.750000"
(o formato sprintf% d padrão) enquanto isso retornará"0.75"
. Veja aqui por motivo: stackoverflow.com/a/13686914/785171to_string é um problema atual do Cygwin
Aqui está uma nova resposta para um tópico antigo. Um novo surgiu, mas foi rapidamente anulado, Cygwin: g ++ 5.2: 'to_string' não é membro de 'std' .
Que pena, talvez tivéssemos recebido uma resposta atualizada. Segundo o @Alex, o Cygwin g ++ 5.2 ainda não está funcionando a partir de 3 de novembro de 2015.
Em 16 de janeiro de 2015, Corinna Vinschen, mantenedora da Cygwin na Red Hat, disse que o problema era uma falha no newlib. Ele não suporta a maioria das funções duplas e, portanto, não reconhece o C99.
Red Hat é,
Em 25 de outubro de 2015, Corrine também disse :
Então só temos isso. Talvez um de nós que tenha conhecimento e tempo possa contribuir e ser o herói.
A Newlib está aqui .
fonte
Alterar padrão C ++ padrão
Do erro (COMPILE FILE FAILED): 'to_string' não é membro de 'std'
Para (COMPILAR ARQUIVO COM SUCESSO)
Testado no Cygwin G ++ (GCC) 5.4.0
fonte
to_string () está presente apenas no c ++ 11, portanto, se a versão do c ++ for menor, use alguns métodos alternativos, como sprintf ou ostringstream
fonte
O fato é que o libstdc ++ realmente é suportado
std::to_string
nos destinos * -w64-mingw32 desde 4.8.0 . No entanto, isso não inclui suporte para MinGW.org, Cygwin e variantes (por exemplo, * -pc-msys do MSYS2). Consulte também https://cygwin.com/ml/cygwin/2015-01/msg00245.html .Eu implementei uma solução alternativa antes que o bug fosse resolvido para o MinGW-w64. Sendo diferente do código em outras respostas, isso é uma imitação para o libstdc ++ (possível). Ele não requer construção de fluxo de sequência, mas depende das extensões libstdc ++. Mesmo agora, estou usando destinos mingw-w64 no Windows, mas ainda funciona bem para vários outros destinos (desde que as
long double
funções não sejam usadas).fonte
Para quem se pergunta por que isso acontece no Android, provavelmente é porque você está usando uma biblioteca padrão c ++ errada. Tente alterar a biblioteca c ++ em seu build.gradle de
gnustl_static
parac++_static
e o padrão c ++ em seu CMakeLists.txt de-std=gnu++11
para-std=c++11
fonte
Se usarmos uma solução de luz de modelo (como mostrado acima) como a seguir:
Infelizmente, teremos problemas em alguns casos. Por exemplo, para membros const estáticos :
hpp
cpp
E ligando:
Aqui está uma maneira de resolver o problema (adicione ao tipo size_t ):
HTH.
fonte
nos bloqueios de código, vá para configuração -> configuração do compilador -> sinalizador do compilador -> selecione std c ++ 11 done. Eu tive o mesmo problema ... agora está funcionando!
fonte
Isso aconteceu comigo também: acabei de escrever uma função rápida, em vez de me preocupar em atualizar meu compilador.
fonte
ones_char = '0' + number % 10;