string und integer verbinden



  • Hi

    ich habe einen String x und einen Wert y. und möchte gern einen String z haben der sich dem String x und dem wert y zusammensetzt.

    bsb.

    LPCTSTR x = "test";
    int y =2;

    und im ergebnis soll quasi der string z="test2" rauskommen!!

    kann mir jemand helfen?? Und kann mir jemand sagen warum ich trotz string.h nicht mit string eine variable definieren kann, sondern nur mit LPCTSTR?? 😕



  • weil die string.h keinen typ string beinhaltet ?

    std::string ist in der <iostream> oder <stdio.h> afaik



  • die beiden hab ich aber auch geladen!!!



  • std::string ist in der <iostream> oder <stdio.h> afaik

    Weder noch. Versuchs schlicht und einfach mal mit <string>. Also nicht <string.h> sondern <string>. Einfach nur <string>.

    Dann bedenke, dass es kein string sondern nur ein std::string gibt. Für den Fall das du also nicht irgendwo eine using-Dirketive oder eine passende using-Deklaration hast, musst du std::string schreiben.



  • #include <string>
    #include <sstream>
    
    //...
    
    std::string x = "test", ergebnis;
    int y = 2;
    std::stringstream sout;
    
    sout << x << y;
    ergebnis = sout.str(); //jetzt enthält ergebnis "test2"
    


  • die zeile:

    std::string x = "test", ergebnis;

    erzeugt bei mir folgenden Fehler:

    error C2664: 'GetPrivateProfileStringA' : Konvertierung des Parameters 1 von 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' in 'const char *' nicht moeglich Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden 😕 😕 😕



  • von string zu const char* kommst du mit der Memberfunktion c_str: MeineCharPointerWollendeFunktion(x.c_str());

    <winapi>
    BTW ist LPCTSTR potentiell Unicode, darauf sollte man vielleicht achten. Das heißt, es kann je nachdem, ob UNICODE (oder wars _UNICODE?) definiert ist, string oder wstring das richtige sein. Wahrscheinlich wär das beste sowas:

    typedef std::basic_string<TCHAR> tstring;
    

    </winapi>



  • HumeSikkins schrieb:

    std::string ist in der <iostream> oder <stdio.h> afaik

    Weder noch.

    das da :

    #include <iostream>
    using namespace std;
    #pragma argsused
    int main(int argc, char* argv[])
    {       string holahitidiewaldfee = "blub";
            return 0;
    }
    //--------------------------------
    

    funktioniert aber bei mir ?



  • 1ntrud0r: Abgesehen davon, dass da nirgends string.h noch stdio.h direkt eingebunden werden ... C++ Standard-Header dürfen sich gegenseitig einbinden, also bekommst du z.B. <string> bei <iostream> kostenlos dazu (jedenfalls bei manchen Compilern).
    Das ist mir letztens erst über die Füße gefallen, als ich zwar nirgends stdio.h drin hatte, aber trotzdem EOF nicht für was anderes benutzen konnte, weil es als -1 #define'd war.



  • using namespace std; hier norgelt er bei mir rum....



  • Bashar schrieb:

    1ntrud0r: Abgesehen davon, dass da nirgends string.h noch stdio.h direkt eingebunden werden ... C++ Standard-Header dürfen sich gegenseitig einbinden, also bekommst du z.B. <string> bei <iostream> kostenlos dazu (jedenfalls bei manchen Compilern).
    Das ist mir letztens erst über die Füße gefallen, als ich zwar nirgends stdio.h drin hatte, aber trotzdem EOF nicht für was anderes benutzen konnte, weil es als -1 #define'd war.

    ahso .. oki wusste ich nicht so dirket 🙂



  • @luiggi: Welchen Compiler verwendest Du denn?



  • visual basic c++ 6.0 kann mir jemand ne bessere variante empfehlen



  • Du meinst visual c++ 6 oder visual studio 6. bist du sicher, dass du <iostream> und nicht <iostream.h> geschreiben hast? mit .h steht es nämlich im globalen Raum nicht in std.



  • Den gibts gar nicht, meinst du Visual C++? Das konkrete Programm, wo er bei der using-Direktive rummeckert, würde mich interessieren ... das tut er eigentlich nur, wenn er den Namensraum std nicht kennt. Das heißt, dass du keine Standard-Header eingebunden hast. Wenn du beispielsweise iostream**.h** statt iostream nimmst, und sonst nichts, kennt er std nicht.

    Lern es lieber gleich richtig (also ohne .h, und mit Berücksichtigung des Namensraumes).



  • Mit dem .h ist das so eine Sache. Ist zwar nicht Thema, aber wenn er auf Linux, besser gesagt Kylix umsteigt (weiß nicht wie das da bei anderen Compilern f. Linux aussieht) muss er (ganz selten nicht) das .h oder .hpp mitschreiben, da die Header-Datei sonst nicht erkannt wird.

    Code-Hacker



  • Wahrscheinlich verwechselst du grade irgendwas. Das .h kann man nicht "weglassen". Wenn du boost/shared_ptr.hpp oder unistd.h einbinden willst, musst du auch <boost/shared_ptr.hpp> bzw. <unistd.h> schreiben. Es ist nur so, dass die Standardheader (iostream, cmath, memory und Co.) kein .h oder .hpp im Namen haben.


Anmelden zum Antworten