
Anurag Kalia
Ich erstelle ein kleines Vokabular-Erinnerungsprogramm, bei dem Wörter zufällig auf ihre Bedeutung hin aufblitzen würden. Ich möchte die Standard-C++-Bibliothek verwenden, wie Bjarne Stroustroup uns sagt, aber ich bin direkt von Anfang an auf ein scheinbar seltsames Problem gestoßen.
Ich möchte a ändern long
Ganzzahl in std::string
um sie in einer Datei ablegen zu können. Ich habe angestellt to_string()
für das Selbe. Das Problem ist, wenn ich es mit g++ (Version 4.7.0, wie in seinem –version-Flag erwähnt) kompiliere, 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ß, dass es nicht an der msdn-Bibliothek liegen kann klar sagt es existiert und eine frühere Frage zu Stack Overflow (für g ++ Version 4.5) besagt, dass es mit aktiviert werden kann -std=c++0x
Flagge. Was mache ich falsch?

Raptz
Dies ist ein bekannter Fehler unter MinGW. Relevanter Bugzilla. Im Kommentarbereich erhalten Sie eine Patch damit es mit MinGW funktioniert.
Dieses Problem wurde in MinGW-w64-Distributionen höher als GCC 4.8.0 behoben, die von bereitgestellt werden MinGW-w64-Projekt. Trotz des Namens bietet das Projekt Toolchains für 32-Bit zusammen mit 64-Bit. Die Nuwen MinGW-Distribution löst auch dieses Problem.
#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' ;
}
vergessen Sie nicht einzuschließen #include <sstream>

andre
Wie vorgeschlagen, kann dies ein Problem mit Ihrer Compiler-Version sein.
Versuchen Sie, den folgenden Code zu verwenden, um a long
zu std::string
:
#include <sstream>
#include <string>
#include <iostream>
int main() {
std::ostringstream ss;
long num = 123456;
ss << num;
std::cout << ss.str() << std::endl;
}

Nirav Patel
Verwenden Sie diese Funktion …
#include<sstream>
template <typename T>
std::string to_string(T value)
{
//create an output string stream
std::ostringstream os ;
//throw the value into the string stream
os << value ;
//convert the string stream into a string and return
return os.str() ;
}
//you can also do this
//std::string output;
//os >> output; //throw whats in the string stream into the string
to_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 am 3. November 2015 immer noch nicht.
Am 16. Januar 2015 Corinna Vinschen, Cygwin-Maintainer bei Red Hat sagte das Problem war ein Manko von newlib. Es unterstützt die meisten langen Doppelfunktionen nicht und ist daher nicht C99-fähig.
Red Hat ist,
… hoffen immer noch, die “Long Double”-Funktionalität irgendwann in Newlib zu bekommen.
Am 25. Oktober 2015 sagte auch Corrine,
Es wäre trotzdem schön, wenn jemand mit etwas Mathematikkenntnissen die fehlenden long double-Funktionen zu newlib beitragen würde.
Da haben wir es also. Vielleicht kann einer von uns, der das Wissen und die Zeit hat, einen Beitrag leisten und der Held sein.
Newlib ist Hier.

Joma
Standard-C++-Standard ändern
Von (COMPILE FILE FAILED) Fehler: „to_string“ ist kein Mitglied von „std“
-std=c++98
Zu (DATEI KOMPILIEREN ERFOLGREICH)
-std=c++11 oder -std=c++14
Getestet auf Cygwin G++(GCC) 5.4.0

Boris
Wenn wir eine Template-Light-Lösung (wie oben gezeigt) wie die folgende verwenden:
namespace std {
template<typename T>
std::string to_string(const T &n) {
std::ostringstream s;
s << n;
return s.str();
}
}
Leider werden wir in einigen Fällen Probleme haben. Zum Beispiel für statische Konstante Mitglieder:
hpp
class A
{
public:
static const std::size_t x = 10;
A();
};
cpp
A::A()
{
std::cout << std::to_string(x);
}
Und verlinken:
CMakeFiles/untitled2.dir/a.cpp.o:a.cpp:(.rdata$.refptr._ZN1A1xE[.refptr._ZN1A1xE]+0x0): undefined reference to `A::x'
collect2: error: ld returned 1 exit status
Hier ist eine Möglichkeit, das Problem zu lösen (hinzufügen zu type Größe_t):
namespace std {
std::string to_string(size_t n) {
std::ostringstream s;
s << n;
return s.str();
}
}
HTH.
9934000cookie-checkto_string ist kein Mitglied von std, sagt g++ (mingw)yes
Funktioniert mit meinem GCC 4.4.5 (dh gibt einen “mehrdeutigen Überlastungsfehler” aus); vielleicht deine
libstdc++
ist veraltet?– Fred Foo
19. Oktober 2012 um 13:33 Uhr
Es funktioniert auf Ideonedas GCC 4.5.1 verwendet.
– Kerrek SB
19. Oktober 2012 um 13:40 Uhr
Dies funktioniert bei mir mit g++ 4.6.3. Ihr Fehler bezieht sich auf Zeile 11. Sie sagen, Ihr Programm wurde “im Wesentlichen auf” Ihren Code reduziert, aber gibt der von Ihnen gepostete Code auch diesen Fehler aus?
– Vaughn Cato
19. Oktober 2012 um 13:40 Uhr
@VaughnCato – Ja, das ist das genaue Programm. Ich sollte es bearbeiten, um es klarer zu machen. Außerdem, was macht dieser Streuner da?
– Anurag Kalia
19. Oktober 2012 um 14:11 Uhr
Dies funktioniert bei mir auch nicht, obwohl ich GCC 5.3.1 verwende. Was es jedoch behebt, ist einfach die Verwendung eines späteren C++-Standards – dh durch Kompilieren mit dem Flag
-std=c++11
oder höher.– Arturo Don Juan
5. September 2016 um 15:47 Uhr