QList aus abgeleiteten,komplexen Objekten



  • Hi,
    ich hab ein Problem mit einer Art vektor (konkret QList). Ich will nämlich Objekte in die Liste stecken,welche komplex sind; es werden dem Konstruktor also Parameter übergeben. Mein Code sieht bisher so aus:

    QList<Klasse> list;
    Klasse item(...);
    list.append(item);
    

    Das funktioniert nun leider nicht. Das scheint daran zu liegen das die Klasse abgeleitet ist. Warum das ein Problem darstellt weiß ich nicht. Jedenfalls wird ein ziemlich komplexer Fehlercode ausgegeben.
    Die wichtigsten Fehlereldngen sind glaube ich, dass der Konstruktor und der operator= der Basisklasse private sind. Ich komm jedenfalls ohne Hilfe nicht weiter. Ich hoffe ihr könnt mit der Beschreibung etwas anfangen, ansonsten muss ich wohl den ganzen Fehlercode posten. Wäre nett wenn mir jemand weiterhelfen könnte. 🙂



  • QList speichert, wie die meisten C++ Container, Kopien von Objekten.
    D.h. sie müssen auch kopierbar sein. D.h. der Copy-Konstruktor muss public sein.

    Warum es eine Fehlermeldung bezüglich operator= gibt, weiss ich nicht. mMn. dürfte QList den nicht brauchen.

    Und nochwas: da QList Kopien speichert, funktioniert folgendes sowieso NICHT:

    QList<Basisklasse> list;
    list.append(AbgeleiteteKlasse(1, 2, 3));
    

    Bzw. es funktioniert oft genug schon (in dem Sinn dass es compilierbar und ausführbar ist), aber in der Liste befindet sich dann trotzdem nur ein Objekt vom Typ Basisklasse . Was da passiert nennt sich "slicing" - unter dem Begriff findest du auch genug Material zu dem Thema falls du mehr dazu lesen willst.

    Wenn du polymorphe Objekte speichern willst, dann musst du entweder normale Container mit Smart-Pointern kombinieren, oder aber spezielle Container verwenden die das erlauben (z.B. Boost Pointer-Container).


Anmelden zum Antworten