Ich mache ein kleines Vokabular-Erinnerungsprogramm, in dem Wörter nach dem Zufallsprinzip auf mich gerichtet werden, um Bedeutungen zu erhalten. Ich möchte die Standard-C ++ - Bibliothek verwenden, wie uns Bjarne Stroustroup sagt, aber ich bin sofort auf ein scheinbar seltsames Problem gestoßen.
Ich möchte eine long
Ganzzahl in ändern std::string
, um sie in einer Datei speichern zu können. Ich habe to_string()
für das gleiche angestellt. Das Problem ist, wenn ich es mit g ++ kompiliere (Version 4.7.0, wie im Flag --version erwähnt), heißt es:
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'
Mein Programm, das diesen Fehler ausgibt, ist:
#include <string>
int main()
{
std::to_string(0);
return 0;
}
Aber ich weiß, es kann nicht an der MSDN-Bibliothek liegen eindeutig dass sie vorhanden ist, und eine frühere Frage zum Stapelüberlauf (für g ++ Version 4.5) besagt, dass sie mit dem -std=c++0x
Flag aktiviert werden kann. Was mache ich falsch?
libstdc++
veraltet?-std=c++11
oder höher.Antworten:
Dies ist ein bekannter Fehler unter MinGW. Relevante Bugzilla . Im Kommentarbereich können Sie einen Patch erhalten , damit er mit MinGW funktioniert.
Dieses Problem wurde in MinGW-w64-Distributionen behoben, die höher als GCC 4.8.0 sind und vom MinGW-w64-Projekt bereitgestellt werden . Trotz des Namens bietet das Projekt Toolchains für 32-Bit und 64-Bit. Die Nuwen MinGW Distribution löst dieses Problem ebenfalls.
quelle
std::to_string
arbeiten, indem ich MinGW 4.8.1 (speziellx32-4.8.1-posix-dwarf-rev5
) über MinGW-Builds installierte . Im Gegensatz dazuto_string
hat nicht die Arbeit mit MinGW 4.8.1 durch installiert entweder die „mingw-get“ Installateur oder das TDM-GCC - Paket.#define _GLIBCXX_USE_C99 1
inC:\MinGW\lib\gcc\mingw32\4.8.1\include\c++\mingw32\bits\c++config.h
wie hierVergessen Sie nicht einzuschließen
#include <sstream>
quelle
std::to_string(0.75)
wird normalerweise zurückgegeben"0.750000"
(das Standardformat sprintf% d), während dies zurückgegeben wird"0.75"
. Siehe hier für Grund: stackoverflow.com/a/13686914/785171Wie vorgeschlagen, kann dies ein Problem mit Ihrer Compilerversion sein.
Versuchen Sie, den folgenden Code zu verwenden, um a
long
in zu konvertierenstd::string
:quelle
std::string
möchten , wenn Sie eine möchten.str()
.std::to_string(0.75)
wird normalerweise zurückgegeben"0.750000"
(das Standardformat sprintf% d), während dies zurückgegeben wird"0.75"
. Siehe hier für Grund: stackoverflow.com/a/13686914/785171Verwenden Sie diese Funktion ...
quelle
std::to_string(0.75)
wird normalerweise zurückgegeben"0.750000"
(das Standardformat sprintf% d), während dies zurückgegeben wird"0.75"
. Siehe hier für Grund: stackoverflow.com/a/13686914/785171to_string ist ein aktuelles Problem mit Cygwin
Hier ist eine neue Antwort auf einen alten Thread. Ein neues ist aufgetaucht, wurde aber schnell gelöscht. Cygwin: g ++ 5.2: 'to_string' ist kein Mitglied von 'std' .
Schade, vielleicht hätten wir eine aktualisierte Antwort bekommen. Laut @Alex funktioniert Cygwin g ++ 5.2 zum 3. November 2015 immer noch nicht.
Am 16. Januar 2015 sagte Corinna Vinschen, eine Cygwin-Betreuerin bei Red Hat , das Problem sei ein Mangel an Newlib. Es unterstützt die meisten langen Doppelfunktionen nicht und ist daher nicht C99-fähig.
Red Hat ist,
Am 25. Oktober 2015 Corrine sagte auch ,
Da haben wir es also. Vielleicht kann einer von uns, der das Wissen und die Zeit hat, dazu beitragen und der Held sein.
Newlib ist da .
quelle
Ändern Sie den Standard-C ++ - Standard
Von (COMPILE FILE FAILED) Fehler: 'to_string' ist kein Mitglied von 'std'
Zu (DATEI ERFOLGREICH ERSTELLEN)
Getestet auf Cygwin G ++ (GCC) 5.4.0
quelle
to_string () ist nur in c ++ 11 vorhanden. Wenn die c ++ - Version weniger ist, verwenden Sie einige alternative Methoden wie sprintf oder ostringstream
quelle
Tatsache ist, dass libstdc ++ seit 4.8.0 tatsächlich
std::to_string
in * -w64-mingw32-Zielen unterstützt wird . Dies beinhaltet jedoch keine Unterstützung für MinGW.org, Cygwin und Varianten (z. B. * -pc-msys von MSYS2). Siehe auch https://cygwin.com/ml/cygwin/2015-01/msg00245.html .Ich habe eine Problemumgehung implementiert, bevor der Fehler für MinGW-w64 behoben wurde. Da dies sich von Code in anderen Antworten unterscheidet, ist dies eine Nachahmung von libstdc ++ (wie möglich). Es erfordert keine String-Stream-Konstruktion, hängt jedoch von libstdc ++ - Erweiterungen ab. Selbst jetzt, wo ich mingw-w64-Ziele unter Windows verwende, funktioniert es immer noch gut für mehrere andere Ziele (solange
long double
Funktionen nicht verwendet werden).quelle
Wenn Sie sich fragen, warum dies unter Android geschieht, liegt dies wahrscheinlich daran, dass Sie eine falsche C ++ - Standardbibliothek verwenden. Versuchen Sie, die c ++ - Bibliothek in Ihrem build.gradle von
gnustl_static
bisc++_static
und den c ++ - Standard in Ihrer CMakeLists.txt von-std=gnu++11
bis zu ändern-std=c++11
quelle
Wenn wir eine Template-Light-Lösung (wie oben gezeigt) wie die folgende verwenden:
Leider werden wir in einigen Fällen Probleme haben. Zum Beispiel für statische const Mitglieder:
hpp
cpp
Und verlinken:
Hier ist eine Möglichkeit, das Problem zu lösen (zum Typ size_t hinzufügen ):
HTH.
quelle
In Codeblöcken gehen Sie zu Einstellung -> Compiler-Einstellung -> Compiler-Flag -> wählen Sie Standard-C ++ 11 fertig. Ich hatte das gleiche Problem ... jetzt funktioniert es!
quelle
Dies ist mir auch passiert. Ich habe nur eine Schnellfunktion geschrieben, anstatt mir Gedanken über die Aktualisierung meines Compilers zu machen.
quelle
ones_char = '0' + number % 10;