String in CString umwandeln



  • Hallo Leute,

    ich stehe gerade vor dem Problem, einen CString(MFC) in einen String(STL) umzuwandeln. Bekomme es aber nicht hin. Diese Methode funktioniert nicht:

    std::string a;
    CString b;
    
    b = "test";
    // CString -> std::string
    a = LPCTSTR( b );
    

    Könnt ihr mir helfen?

    Danke im Voraus.

    Grüsse
    xthing



  • Wie äußert sich dieses "funktioniert nicht"?

    (wenn du mit UNICODE arbeitest, ist CString ein wchar_t-String - d.h. du benötigst auch die wchar_t-Version von std::string als Ziel (die nennt sich std::wstring))



  • Die Fehlermeldung lautet:
    error C2679: Binärer Operator '=': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'LPCTSTR' akzeptiert (oder keine geeignete Konvertierung möglich)

    Grüsse
    xthing



  • Dann geh mal deine Projekteinstellungen durch - ist das Makro "UNICODE" irgendwo definiert? (und lass dir mal anzeigen, wie der Datentyp LPCTSTR definiert ist)



  • Der ist so definiert:

    typedef LPCWSTR PCTSTR, LPCTSTR;

    Wo muss denn das Makro UNICODE definiert sein. Unter Projekte / Eigenschaften /?

    Danke noch mal.

    Grüsse
    xthing



  • xthing schrieb:

    Der ist so definiert:

    typedef LPCWSTR PCTSTR, LPCTSTR;

    Ja, das deutet auf UNICODE hin - d.h. du müsstest auf STL-Seite mit wstring arbeiten.

    Wo muss denn das Makro UNICODE definiert sein. Unter Projekte / Eigenschaften /?

    Projekte -> Eigenschaften -> C/C++ in der Kategorie "Präprozessor"



  • Danke, mit wstring klappt es ,mit LPCTSTR(cstring), allerdings erwartet die Funktion, die ich verwenden muss einen einfachen string. Wie kann wstring denn string wandeln?

    Danke noch mal.

    Grüsse
    xthing



  • Da fällt mir auf Anhieb nur ein Ansatz ein - narrow():

    wstring src=...;
    ctype<wchar_t> converter;//wenn das nicht geht, hol dir die Facette von cin
    string tgt;
    for(int i=0;i<src.length();++i)
      tgt.push_back(converter.narrow(src[i],' ');
    

    (oder du löschst die Definition UNICODE aus deinen Projekteinstellungen)


Anmelden zum Antworten