LeftStr/RightStr in C++ Builder 2010



  • Hallo C++ Freunde,

    Ich habe meine Entwicklungsumgebung von Borland 6 auf Embarcardero C++ Builder 2010 geupdatet. Nun stellen sich aber noch kleine Probleme beim Konvertieren von Projekten ein. z.B. hier bei LeftStr bzw RightStr kommt immer diese Fehlermeldung (Pfade mal entfernt)

    [BCC32 Fehler] E2015 Mehrdeutigkeit zwischen '_fastcall Strutils::LeftStr(const System::AnsiStringT<0>,const int) und
     '_fastcall Strutils::LeftStr(const System::WideString,const int)
    

    Normalerweise habe ich im bcb6 mit Indy Komponenten ein ähnliches Problem gehabt und dies so gelößt:

    ShowMessage(Strutils::LeftStr("test",2));
    

    Doch wie geht das im C++ Builder 2010?



  • Der Code in der Fehlerzeile wäre mal informativ, so nebenbei erwähnt. Wie soll jemand helfen wenn man nicht mal sieht was du machst. 🙄



  • ich rufe das hier auf (wie oben beschrieben):

    ShowMessage(Strutils::LeftStr("test",2));
    

    bzw das hier

    ShowMessage(LeftStr("test",2));
    


  • Könnte es sein, dass ShowMessage() im 2010er einen Unicode-String erwartet?



  • Der Compiler weiss nicht ob "test" ein AnsiString oder WideString ist
    und hat nun Probleme welche von den beiden Funktionen er verwenden soll.

    Strutils::LeftStr(const System::AnsiStringT<0>,const int)
    Strutils::LeftStr(const System::WideString,const int)

    Willst du das dein "test" ein WideString ist dann schreibe L"test"
    falles es ein AnsiString sein soll dann caste auf (AnsiString)"test"



  • Danke an VergissEs!
    Diese Lösung läuft:

    ShowMessage(LeftStr((AnsiString)"test", 2));
    


  • Ist der Cast wirklich sinnvoll, oder notwendig? Ich hätte statt eines Casts den Konstruktor von AnsiString verwendet, also

    ShowMessage(LeftStr(AnsiString("test"), 2));
    

    [/quote]


Anmelden zum Antworten