CList Problem - evt. Zuweisungsoperator
-
Hallo erstmal...
also, ich hab folgendes Problem.Ich verwende die std-lib mit CList.
Ich habe eine Klasse geschrieben, welche als Elementvariable
eine CList<CString,CString&>* besitzt.
Objekte dieser Klasse habe ich nun wiederrum in einer weiteren CList.Wenn ich nun allerdings mir von der CList ein Objekt der besagten Klasse
zurückgeben lasse (es ist eine Referenz), und an diesem Objekt Änderungen vornehme,
dann wirken sie sich nicht auf das Objekt aus. Da sich das ganze wie gesagt
in einer CList abspielt, und ich einen Zuweisungoperator schreiben musste, nehme ich
mal an, das das Problem da irgendwo liegen könnte.Aber zuerst mal der Verursachercode:
while( true ) { CDoubleFile dfFile; //Die Klasse mit dem CList<CString,CString&>* if( CurFile.Vergleich( &CompareFile, SearchOptions ) ) { //CurFile gehört einer //anderen, ordentlich //funktionierenden Klasse an... bool There = false; POSITION posTemp = pClComparedList->GetHeadPosition(); while( posTemp != 0 && (!There) ) { dfTemp = pClComparedList->GetNext( posTemp ); //Hier gibts die Referenz //pClComparedList ist eine weitere //CList<CDoubleFile,CDoubleFile&> if( dfTemp.GetFileName() == CurFile.GetFilename() ) { There = true; } } if( !There ) { CDoubleFiles dfFile( &CurFile ); pClComparedList->AddTail( dfFile ); } else { dfTemp.AddPath( &CurFile ); //Das hier macht er's nich... } //Die Änderung ist nur bis zum Neubeginn } //der Schleife wirksam. } //Mit dem Debugger nachgeschaut aber auch nur //im Rückgabewert dfTemp und nicht in der Liste //von der ich die Referenz habe. //So... //das war die Stelle... //nun noch den selbsterstellten Zuweisungoperator... CDoubleFiles& CDoubleFiles::operator =( CDoubleFiles& DoubleFiles ) { ASSERT( this != &DoubleFiles ); Filename = DoubleFiles.GetFileName(); Lenght = DoubleFiles.GetLenght(); AllPath->RemoveAll(); AllPath->AddTail( DoubleFiles.GetPathListPointer() ); //GetPathListPointer holt einen Zeiger auf die //AllPath Liste aus CStrings. //Soll die andere Liste ersetzen bzw. hineinkopiert werden //Noch so ne Frage: Erzeugt AddTail( CList* pNewList ) //eine tiefe Kopie oder hängt es einfach nur an return (*this); }So das wars. Hoffentlich ist es nicht zuviel auf einmal.
Schon mal danke im voraus für alle Lösungs- bzw. Verbesserungsvorschläge.
-
dfTemp = pClComparedList->GetNext( posTemp ); //Hier gibts die ReferenzJa und wie ist dfTemp deklariert?
-
Naja...
Als CDoubleFiles dfTemp;Steht ganz oben.
Soll das etwa heissen ich sollte das Ding so deklarieren
CDoubleFiles& dfTemp; //Naja, es müsste noch zugewiesen werden...
-
// Bei dieser OP wird eine KOPIE angelegt !!! CDoubleFiles dfTemp; dfTemp = pClComparedList->GetNext( posTemp ); // das funzt net CDoubleFiles& dfTemp; dfTemp = pClComparedList->GetNext( posTemp ); // mussu so machen CDoubleFiles* dfTemp; dfTemp = &pClComparedList->GetNext( posTemp );
-
Dankeschön...
die einzige Möglichkeit die ich noch nicht ausprobiert hab...