to_string ist kein Mitglied von std, sagt g++ (mingw)

Lesezeit: 7 Minuten

to string ist kein Mitglied von std sagt g mingw
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?

  • 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

to string ist kein Mitglied von std sagt g mingw
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.

  • Weitere Diskussion hier: stackoverflow.com/questions/8542221/…

    – Ben

    2. November 2012 um 3:09 Uhr

  • Ich verwende MinGW-w64 Version 4.8.1 und es funktioniert nicht. Ich habe das genaue Programm aus der Frage kopiert. Ich erhalte immer noch den Fehler „to_string“ ist kein Mitglied von „std“. Ich habe es wie folgt kompiliert: g++ -std=c++0x -o tostring_test.exe tostring_test.cpp

    – zam664

    2. Dezember 2013 um 16:58 Uhr

  • @zam664 Ich kann nicht erklären warum, aber ich habe std::to_string funktionieren, indem Sie MinGW 4.8.1 installieren (insbesondere x32-4.8.1-posix-dwarf-rev5) durch MinGW-Builds. Im Gegensatz, to_string Tat nicht Arbeiten Sie mit MinGW 4.8.1, das entweder über das Installationsprogramm „mingw-get“ oder das TDM-GCC-Paket installiert wurde.

    – Ceran

    16. April 2014 um 12:20 Uhr

  • Der Patch war nicht genug für mich, ich musste #define _GLIBCXX_USE_C99 1 in C:\MinGW\lib\gcc\mingw32\4.8.1\include\c++\mingw32\bits\c++config.h wie beschrieben Hier

    – Zooch

    19. März 2015 um 19:47 Uhr


  • @Cerran “MinGW-Builds” sind Builds von MinGW-w64, einem anderen Projekt als MinGW. Ein Grund, warum MinGW-w64 abgezweigt wurde, war, dass sie tatsächlich Fehler beheben konnten, wie den, um den es in diesem Thread ging.

    – MM

    27. März 2016 um 7:33 Uhr


#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>

  • Gibt es eine Möglichkeit, auch stod einzubinden?

    – Jackie

    2. Februar 2016 um 17:34 Uhr

  • Bitte beachten Sie, dass dies keine exakte Lösung in Bezug auf nachgestellte Nullen ist. Das Original std::to_string(0.75) wird in der Regel zurückkehren "0.750000" (das Standardformat sprintf %d), während dies zurückgegeben wird "0.75". Siehe hier für den Grund: stackoverflow.com/a/13686914/785171

    – Krzysztof Bociurko

    29. September 2017 um 10:02 Uhr

1647081612 2 to string ist kein Mitglied von std sagt g mingw
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;
}

  • Ich habe es nicht ausgeführt, aber danke, dass Sie mein unmittelbares Dilemma gelöst haben. Jetzt muss ich nur noch herausfinden, wie es funktioniert. 🙂

    – Anurag Kalia

    19. Oktober 2012 um 14:18 Uhr


  • Nur eine Anmerkung, wenn Sie möchten std::stringdie Sie verwenden möchten .str() stattdessen.

    – Christian Mann

    30. November 2014 um 22:34 Uhr

  • Bitte beachten Sie, dass dies keine exakte Lösung in Bezug auf nachgestellte Nullen ist. Das Original std::to_string(0.75) wird in der Regel zurückkehren "0.750000" (das Standardformat sprintf %d), während dies zurückgegeben wird "0.75". Siehe hier für den Grund: stackoverflow.com/a/13686914/785171

    – Krzysztof Bociurko

    29. September 2017 um 10:02 Uhr

1647081612 41 to string ist kein Mitglied von std sagt g mingw
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.

  • Wenn man sieht, wie sie erst in diesem Jahr vom Versenden von Patches per E-Mail zu Git migriert sind, fühlt es sich entmutigend an …

    – rr-

    6. Dezember 2015 um 13:59 Uhr

1646803210 649 Wie kann ich die Konsole loschen
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

  • Wenn man sieht, wie sie erst in diesem Jahr vom Versenden von Patches per E-Mail zu Git migriert sind, fühlt es sich entmutigend an …

    – rr-

    6. Dezember 2015 um 13:59 Uhr

1647081614 862 to string ist kein Mitglied von std sagt g mingw
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.

993400cookie-checkto_string ist kein Mitglied von std, sagt g++ (mingw)

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy