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)