CString und string
-
class CBoyer_Moore { public: CBoyer_Moore(void); ~CBoyer_Moore(void); unsigned int find_string(string s, string i); private: };
so sieht meine funktion aus, also 2 strings aus der stl als parameter
string str CBoyer_Moore bmobj; CString strTemp; while(file.ReadString(strTemp)!= NULL ) { strTemp; bmobj.find_string(str,strTemp);......
h:\Projekte\AIDE\COpen.h(75) : error C2664: 'CBoyer_Moore::find_string': Konvertierung des Parameters 2 von 'CString' in 'std::string' nicht möglich
seit wann?
-
Schon immer? Versuchs mal mit CString::GetBuffer() (... oder wie das hieß). Da bekommt du einen const char* wenn ich mich nicht irre. Den kann std::string mit einem Konstruktor aufrufen und dein Problem ist gelöst.
-
CString a; string v; v = a;
da sagt der compiler nichts
-
string v; string k; strTemp; v = str; k = strTemp; bmobj.find_string(v,k);
wenn man sie vor dem aufruf konvertiert funktioniert es, komisch
-
steff3 schrieb:
class CBoyer_Moore { public: CBoyer_Moore(void); ~CBoyer_Moore(void); unsigned int find_string(string s, string i); private: };
so sieht meine funktion aus, also 2 strings aus der stl als parameter
string str CBoyer_Moore bmobj; CString strTemp; while(file.ReadString(strTemp)!= NULL ) { strTemp; bmobj.find_string(str,strTemp);......
h:\Projekte\AIDE\COpen.h(75) : error C2664: 'CBoyer_Moore::find_string': Konvertierung des Parameters 2 von 'CString' in 'std::string' nicht möglich
seit wann?
ok fangen wir mal an
- unsigned int aber in deiner while schleife gibts du ja nichts zurück zum "auswerten".
- warum übergibts du nichts per const ref? und erstellst kopien?
- du hast string als 2ten parameter angegeben, aber übergibts einen CString, normalerweise "nicht gut". probiert doch malbmobj.find_string(str,strTemp.c_str());
-
ja_dann schrieb:
steff3 schrieb:
class CBoyer_Moore { public: CBoyer_Moore(void); ~CBoyer_Moore(void); unsigned int find_string(string s, string i); private: };
so sieht meine funktion aus, also 2 strings aus der stl als parameter
string str CBoyer_Moore bmobj; CString strTemp; while(file.ReadString(strTemp)!= NULL ) { strTemp; bmobj.find_string(str,strTemp);......
h:\Projekte\AIDE\COpen.h(75) : error C2664: 'CBoyer_Moore::find_string': Konvertierung des Parameters 2 von 'CString' in 'std::string' nicht möglich
seit wann?
ok fangen wir mal an
- unsigned int aber in deiner while schleife gibts du ja nichts zurück zum "auswerten".
- warum übergibts du nichts per const ref? und erstellst kopien?
- du hast string als 2ten parameter angegeben, aber übergibts einen CString, normalerweise "nicht gut". probiert doch malbmobj.find_string(str,strTemp.c_str());
die methode c_str() gibts nur bei string, um sie nach z.B. nach CString zu konvertieren und nicht andersherum
-
lol stimmt, dann schreib ne template fkt
oder überlade notfalls
-
Der Compiler versucht für die Parameteranpassung maximal eine User-Konvertierung, für den Weg von CString nach std::string benötigst du aber zwei Konvertierungen (CString::operator char* und string::string(char*)), also geht das nicht. Das heißt, du müsstest deinen CString explizit nach char* (danach bleibt noch eine implizite Umwandlung) oder string (dann kann direkt ersetzt werden) umwandeln.
(bei der direkten Zuweisung hast du nur eine Konvertierung CString nach char* - dann greift der string::operator=(char*))