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 Referenz
    

    Ja 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...


Anmelden zum Antworten