beliebig viele AnsiStrings via TList verwalten



  • Hallo BCBler

    ich verzweifle momentan an einem mir doch eigentlich zuerst einfach erschienenen Problems:

    es gibt folgenden String als basis:

    teil1;;teil2;;teil3;;teil4;;teil5;;...

    die anzahl der teilstrings (durch ;; getrennt) kann beliebig sein

    jeder teilstring soll nun element der TList "MyList" werden, sodass die MyList nach dem erfolgreichen hinzufügen so aussehen sollte:
    Item[0] ist "teil1"
    Item[1] ist "teil2", etc.

    nur dazu muss ich der TList ja erstmal beibringen, dass es sich nur um AnsiString-Datentypen handelt, da es sonst ja vermutlich "verrückt" spielt

    Mein derzeitiger Versuch:

    TList* valueList = new TList;
    
                valueList->Add( FirstPart );
                valueList->Add( SecondPart );
                valueList->Add( ThirdPart );
    

    // FirstPart ist der erste TeilString, SecondPart der zweite, etc... ihr seht auch das ist noch nicht dynamisch gelöst, dass beliebig viele strings eingelesen werden können

    Der eigentliche Fehler ist jedoch:

    [C++ Fehler] xxx.cpp(34): E2034 Konvertierung von 'AnsiString' nach 'void *' nicht möglich



  • Hi

    gibt es einen besonderen Grund, warum du nicht die TStringList benutzt?
    Sie leitet sich von TStrings ab und kann genau so benutzt werden, wie du es in deinem Beispiel willst.

    MfG DarkMaZe



  • werde mit deiner methode leider nicht arbeiten können, da ich einfach auf TList angewiesen bin.

    bin trotzdem schon nen stück weiter

    AnsiString FirstPart = "test";
    AnsiString* FP = &FirstPart;
    
    TList* valueList = new TList;
    valueList->Add( FP );
    AnsiString* test = valueList->Items[0];
    

    In der letzten Zeile kommt der Fehler:
    [C++ Fehler] xxx.cpp(35): E2034 Konvertierung von 'void *' nach 'AnsiString *' nicht möglich

    Ich verstehe leider nicht, warum, denn: FP ist vom Typ AnsiString* und genau dieses FP füge ich der Liste als erstes Element hinzu.

    Nun versuche ich eine zweite Variable vom GLEICHEN Typ AnsiString* mit dem Wert aus valueList->Items[0] gleichzusetzen und der Compiler meckert.

    kann mir das eienr bitte erklären, wo ich hier meinen Denkfehler habe?

    thx



  • Versuch's mal mit einem cast

    AnsiString* test = (AnsiString *) valueList->Items[0];
    

    bzw. einem dynamic_cast:

    AnsiString* test = dynamic_cast<AnsiString *> (valueList->Items[0]);
    

Anmelden zum Antworten