string to ansistring



  • hi all,

    ich hab ne funktion aus ner importierten library. die liefert mir eine liste von strings zurück, wenn ich nun aber einen string aus der liste einen label als caption zuweisen will, meckert der c++builder rum, "cannot convert string to AnsiString"! Wie kann ich einen string in einen AnsiString umwandeln?



  • Hi,
    poste mal deinen Code!

    Sonst TStringList in der Hilfe suchen!

    Alexander Sulfrian



  • mein code ist eigentlich nur eine zeile:

    LabelTag->Caption = *(m_lDates.begin());
    

    Und die Fehler Meldung lautet: Cannot convert 'string' to 'AnsiString'!



  • Hi.

    Das müßte so gehen:

    LabelTag->Caption = *(m_lDates.begin()).c_str();
    

    DJ BlackEagle->greetz



  • also das glaube ich nicht, daß es mit .c_str() funktionieren soll. Es kommt drauf an, was die Methode begin() für einen Rückgabewert hat. Vermutlich einen "char"? Ist aber sehr ungewöhnlich, daß eine Funktion nur ein Zeichen zurückgeben soll und es sich dabei um einen String handeln soll!?

    Ich würde stark vermuten, daß da etwas nicht stimmt.

    Wie auch immer: falls dem so ist und der String nullterminiert ist, solltest Du das so machen und zum Erfolg kommen, wenn es sich tatsächlich um einen String handeln sollte:

    LabelTag->Caption = (char *) *(m_lDates.begin());
    

    Damit wird eine passende Variante eines AnsiString Konstruktors vom Compiler verwendet.

    Aber ich könnte fast schwören, daß es nicht funzt... Wetten!????



  • LabelTag->Caption = (char *) *(m_lDates.begin());
    

    schlecht



  • @JFK: Ich vermute, m_lDates ist ein std::vector, std::queue ö.ä. aus std::string und begin() liefert somit einen Iterator zurück. Dann wäre c_str() genau richtig.



  • hi leutz,

    mit c_str() hat es nicht funktioniert, aber ich hab ne Lösung gefunden!
    Aber trotzdem Danke für die Hilfsbereitschaft!!!!

    Lösung:

    string sWrite = *(m_lDates.begin());
       LabelTag->Caption = sWrite.begin();
    


  • Hallo

    Was du jetzt machst, ist das erste Zeichen deines Strings an die Caption zu übergeben (ist wohl ein char). Ich stimme Eßer zu, dass es sich hier um eine stl Containerklasse wie z.Bsp. vector handelt, aber so wie dein Code aussieht wohl mit Pointern auf string (sehr merkwürdig).
    In dem Fall müsste folgendes funktionieren
    LabelTag->Caption = sWrite.begin()->c_str();
    Wir würden aber alle besser helfen können, wenn du uns mal die Deklaration von sWrite schicken würdest.

    Ciao



  • @Braunstein

    sWrite ist ein ganz normaler string. Und mit sWrite.begin() wird nicht nur ein char übergeben, sondern ein ganzer string. So steht es in der Hilfe zu 'string', hab ich nach ewig langem Suchen gefunden! Es funktioniert ja und die Caption des Labels lautet nach durchlaufen des Codes: Tue Jan 26 2003.
    So wie ich das mir vorgestellt hab!



  • Hallo,

    Wenn sWrite ein ganz normaler string ist sollte folgendes funktionieren.
    LabelTag->Caption = sWrite.c_str();
    Was du mit begin() machst bedeutet: du holst dir einen iterator auf das erste Element des strings den du dann mit * dereferenzierst. Da kannst du auch gleich den string nehmen.



  • genau so funktionert es 😃

    Hat das eigentlich irgendwelche Gründe warum Borlands AnsiString nicht den std::string standardmässig mit = unterstützt? Vor erscheinen der stl wird der wohl nicht programmiert worden sein.

    Ich mein immerhin heisst das vieh C++(!) Builder.
    Wenn ich fies wäre würdich jetzt vermuten damit jeder den AnsiString nimmt und danach an Borlands Produkte gebunden ist und nichtmehr umsteigen kann aber Borland ist dochnicht Microsoft 😃


Anmelden zum Antworten