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 mal

    bmobj.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 mal

    bmobj.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*))


Anmelden zum Antworten