Archiv verlassen und diese Seite im Standarddesign anzeigen : Tiefe Objektkopie von QList mit Zeigern
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
Wie hast Du den Kopiekonstruktor überschrieben? (Code)
mit
ClassB::ClassB(const ClassB& data)
{
m_clList = data.m_clList; // Leider nur eine flache Kopie da in der Liste Zeiger sind
}
MfG
xmarvel
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.
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,
_
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,
_
thx so klappt es mit geringer modifikation.
m_clList.push_back(new CLASSA(*(other.m_clList.at(i))));
MfG
xmarvel
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.