PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tiefe Objektkopie von QList mit Zeigern



xmarvel
20-12-2005, 21:49
hi,

ich habe eine Member Variable die wie folgt aussieht.

QList<CLASSA*> m_clList;


Damit ich eine Tiefe Kopie bekomme muss ich ja den Kopierkonstruktor überschreiben. Nur irgendwie bekomm ich nicht die Inhalte der Liste nicht richtig kopiert kann mir da jemand vielleicht auf die Sprünge helfen?

MfG
xmarvel

Caveman
20-12-2005, 21:52
Wie hast Du den Kopiekonstruktor überschrieben? (Code)

xmarvel
20-12-2005, 22:01
mit


ClassB::ClassB(const ClassB& data)
{
m_clList = data.m_clList; // Leider nur eine flache Kopie da in der Liste Zeiger sind
}


MfG
xmarvel

Caveman
20-12-2005, 22:18
Du kopierst nur die Zeiger, d.h. die kopierten Zeiger zeigen dann natürlich auf die gleiche Speicherstelle als die ursprünglichen.
So kann es nicht gehen, da musst Du dir was anderes einfallen lassen.
Du musst die Speicherplätze, auf die gezeigt wird, sprich den Inhalt, kopieren.

xmarvel
20-12-2005, 22:25
ja ich weiss hab ich doch geschrieben aber wie?
Dachte wenn ich sowas mache funktioniert es


for (int i=0; i<m_clList.size(); ++i) {
m_clList.at(i) = new CLASSA();
}


Da komm aber folgender Fehler: assignment of read-only location

MfG
xmarvel

anda_skoa
21-12-2005, 14:26
for (int i=0; i<other.m_clList.size(); ++i) {
m_clList.push_back = new CLASSA(other.m_clList.at(i));
}


Ciao,
_

xmarvel
21-12-2005, 15:03
da kommt bei mir folgendes:

Fehler keine passende Funktion für Aufruf von "CLASSA::CLASSA(CLASSA* const&)"

Anmerkung: Kandidaten sind CLASSA::CLASSA(const CLASSA&)

Inmoment hab ich in CLASSA noch kein Kopiertkonstruktor überschrieben. Nur den Konstruktor.

MfG
xmarvel

anda_skoa
21-12-2005, 23:09
m_clList.push_back = new CLASSA(*(other.m_clList.at(i)));

Copyconstruktor wäre schön, brauchst du aber nicht unbedingt, wenn CLASSA keine Pointer enthält.

Ciao,
_

xmarvel
29-12-2005, 10:25
thx so klappt es mit geringer modifikation.
m_clList.push_back(new CLASSA(*(other.m_clList.at(i))));

MfG
xmarvel