string Problem



  • #include <iostream>
    #include <windows.h>
    #include <string>
    #include <sstream>
    using namespace std;
    
    template<class T>
    void ZahlToString(T i, string &res)
    {
    	ostringstream temp;
    	temp << i;
    	res = temp.str();
    }
    
    int main()
    {
    	string test;
    
    	ZahlToString(5000, test);
    
    	MessageBox(NULL,(LPCSTR)test,"Info",MB_OK);
    	return 1;
    }
    

    Fehlermeldung: g:\Entwicklung\VisualC++\ZumProbieren\main.cpp(22): error C2440: 'type cast' : cannot convert from 'std::string' to 'LPCSTR'

    Was mach ich hier falsch? MessageBox will nen string, also bekommt es auch einen und trotzdem nimmt er ihn nicht an. Das ursprüngliche Prob ist das ich ne Zahl in einen String konvertieren will und ihn dann in einer MessageBox ausgeben will. sprintf stellt mich nicht zufrieden denn dort muß man ja die buffergröße schon vorher kennen usw.



  • MessageBox will nen string

    Aber keinen std::string sondern ein LPCTSTR also einen Zeiger auf einen nullterminierten String.

    Lösung:

    MessageBox(NULL,test.c_str(),"Info",MB_OK);
    


  • Ah, danke. Aber jetzt mal eine ernste frage: wie findet man solche sachen wie c_str() eigentlich? denn im normalfall wird nirgends was verlinkt daraufhin. man müßte dann schon wissen das es das gibt. ich benutz die offline msdn 2003, aber solche lösungen oder möglichkeiten bietet die nie direkt an.



  • VirtualDreams schrieb:

    Ah, danke. Aber jetzt mal eine ernste frage: wie findet man solche sachen wie c_str() eigentlich? denn im normalfall wird nirgends was verlinkt daraufhin. man müßte dann schon wissen das es das gibt. ich benutz die offline msdn 2003, aber solche lösungen oder möglichkeiten bietet die nie direkt an.

    Also wenn ich in meiner Uralt-Version der MSDN im Suchfeld "string" eingebe, im folgenden Dialog dann bei "Position" "C/C++ Languages and C++ Libraries" anwähle, rechts im Fenster als nächstes dem Link "basic_string" folge, dann erhalte ich eine Auflistung aller Funktionen von basic_string. Wähle ich dort die Methode c_str aus, bekomme ich:

    const E *c_str() const;
    The member function returns a pointer to a nonmodifiable C string constructed by adding a terminating null element (E(0)) to the controlled sequence. Calling any non-const member function for *this can invalidate the pointer

    also genau das was ich brauche.

    Alternativ hilft dir auch jede Standard-Lib-Referenz. Z.B.
    http://www.dinkumware.com/manuals/reader.aspx?lib=cpp
    oder
    http://www.sgi.com/tech/stl/table_of_contents.html



  • Hab jetzt mal testweise string in der msdn eingeben, da kam bloß die definition string, sonst nix. dann hab ich mal c_str() genommen, da bin ich auf basic_string members gestossen, dort sthet es dann drinne. also ich hab das dumpfe gefühl das sich die (offlinbe)msdn zum nachteil entwickelt hat. vlt such ich aber immer nach dem falschen, das wäre nich so gut... 😃


Anmelden zum Antworten