Pointer Array auf TStringlist



  • Hallo

    leider funktioniert der Code nicht, da mir der Borland Builder anzeigt das die Zeile

    a_list[i-1] =  *list;
    

    nicht korrekt ist.

    Folgender Fehler

    [C++ Fehler] Unit5.cpp(225): E2328 Operatoren dürfen keine Argumente mit voreingestellten Werten haben

    TStringList *a_list =new TStringList[10];
    TStringList *list = a_list;
    
    list = new TStringList();
    
            for (int y = 0; y < 5 ;y++)
                    list->Add(y);
    
    a_list[4] =  *list;
    delete(list);
    

    Ich wollte ein Array (a_list) von Pointern vom Typ TStringList erzeugen und den Pointer list dann in das jeweilige Array übergeben.

    Warum klappt das nicht ?? Hat jemand eine Idee ??

    Danke
    callisto



  • .. keine Ahnung.

    Ich habe zum Testen deine StringList durch ein std::string ersetzt .. und es läuft.

    Allerdings verwende ich einen gcc.



  • zwar hat die Initialisierung in Zeile 2 keinen Sinn (weil du list danach sofort mit einem neuen Wert belegst), aber im Grunde sollte das laufen, natürlich nur solang StringList einen op= hat.

    callisto schrieb:

    Ich wollte ein Array (a_list) von Pointern vom Typ TStringList erzeugen und den Pointer list dann in das jeweilige Array übergeben.

    Das tust du allerdings nicht. Du erzeugst ein (dynamisches) Array von TStringList Objekten, dann noch ein weiters einzelnes Objekt (ebenfalls dynamisch) und weist dann einem der Objekte im Array das dynamisch erzeugte Objekt zu (mit operator= )

    An deiner Stelle würd ich auf den Pointer- udn Arraykram verzichten, was du mit der Konstruktion vorhast geht vermutlich viel einfacher (und sicherer)



  • TStringList-Objekte müssen als Pointer behandelt werden. Ein Array darauf wäre also so was:

    TStringList** lists = new TStringList*[10]; // Array erzeugen
    liste[0] = new TStringList; // Array füllen
    // zum Schluß das löschen nicht vergessen
    for( size_t i=0; i<10; ++i)
       delete lists[i];
    delete[] lists;
    

    sowas macht man aber besser mit std::vector und boost::shared_ptr (oder tr1) oder bei dir vielleicht eher ein vector mit vector mit string.



  • danke Braunsstein, mir hat das zweite Sternchen gefehlt, jetzt klappt es 😃


Anmelden zum Antworten