<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[CList Problem - evt. Zuweisungsoperator]]></title><description><![CDATA[<p>Hallo erstmal...<br />
also, ich hab folgendes Problem.</p>
<p>Ich verwende die std-lib mit CList.</p>
<p>Ich habe eine Klasse geschrieben, welche als Elementvariable<br />
eine CList&lt;CString,CString&amp;&gt;* besitzt.<br />
Objekte dieser Klasse habe ich nun wiederrum in einer weiteren CList.</p>
<p>Wenn ich nun allerdings mir von der CList ein Objekt der besagten Klasse<br />
zurückgeben lasse (es ist eine Referenz), und an diesem Objekt Änderungen vornehme,<br />
dann wirken sie sich nicht auf das Objekt aus. Da sich das ganze wie gesagt<br />
in einer CList abspielt, und ich einen Zuweisungoperator schreiben musste, nehme ich<br />
mal an, das das Problem da irgendwo liegen könnte.</p>
<p>Aber zuerst mal der Verursachercode:</p>
<pre><code class="language-cpp">while( true ) 
{

CDoubleFile dfFile; //Die Klasse mit dem CList&lt;CString,CString&amp;&gt;* 

if( CurFile.Vergleich( &amp;CompareFile, SearchOptions )  ) { //CurFile gehört einer                                                            

//anderen, ordentlich 
                        //funktionierenden Klasse an...
    bool There = false;
    POSITION posTemp = pClComparedList-&gt;GetHeadPosition();

    while( posTemp != 0 &amp;&amp; (!There) )
    {
    dfTemp = pClComparedList-&gt;GetNext( posTemp ); //Hier gibts die Referenz
      //pClComparedList ist eine weitere 
      //CList&lt;CDoubleFile,CDoubleFile&amp;&gt;   
    if( dfTemp.GetFileName() == CurFile.GetFilename() ) {
        There = true;
    }
}

    if( !There ) {
        CDoubleFiles dfFile( &amp;CurFile );
        pClComparedList-&gt;AddTail( dfFile );
    }
    else {
    dfTemp.AddPath( &amp;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&amp; CDoubleFiles::operator =( CDoubleFiles&amp; DoubleFiles )
{
ASSERT( this != &amp;DoubleFiles );

Filename = DoubleFiles.GetFileName();
Lenght   = DoubleFiles.GetLenght();

AllPath-&gt;RemoveAll();

AllPath-&gt;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);                        
}
</code></pre>
<p>So das wars. Hoffentlich ist es nicht zuviel auf einmal.<br />
Schon mal danke im voraus für alle Lösungs- bzw. Verbesserungsvorschläge.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/6302/clist-problem-evt-zuweisungsoperator</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 10:02:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/6302.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 23 Jun 2003 07:56:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to CList Problem - evt. Zuweisungsoperator on Mon, 23 Jun 2003 07:56:00 GMT]]></title><description><![CDATA[<p>Hallo erstmal...<br />
also, ich hab folgendes Problem.</p>
<p>Ich verwende die std-lib mit CList.</p>
<p>Ich habe eine Klasse geschrieben, welche als Elementvariable<br />
eine CList&lt;CString,CString&amp;&gt;* besitzt.<br />
Objekte dieser Klasse habe ich nun wiederrum in einer weiteren CList.</p>
<p>Wenn ich nun allerdings mir von der CList ein Objekt der besagten Klasse<br />
zurückgeben lasse (es ist eine Referenz), und an diesem Objekt Änderungen vornehme,<br />
dann wirken sie sich nicht auf das Objekt aus. Da sich das ganze wie gesagt<br />
in einer CList abspielt, und ich einen Zuweisungoperator schreiben musste, nehme ich<br />
mal an, das das Problem da irgendwo liegen könnte.</p>
<p>Aber zuerst mal der Verursachercode:</p>
<pre><code class="language-cpp">while( true ) 
{

CDoubleFile dfFile; //Die Klasse mit dem CList&lt;CString,CString&amp;&gt;* 

if( CurFile.Vergleich( &amp;CompareFile, SearchOptions )  ) { //CurFile gehört einer                                                            

//anderen, ordentlich 
                        //funktionierenden Klasse an...
    bool There = false;
    POSITION posTemp = pClComparedList-&gt;GetHeadPosition();

    while( posTemp != 0 &amp;&amp; (!There) )
    {
    dfTemp = pClComparedList-&gt;GetNext( posTemp ); //Hier gibts die Referenz
      //pClComparedList ist eine weitere 
      //CList&lt;CDoubleFile,CDoubleFile&amp;&gt;   
    if( dfTemp.GetFileName() == CurFile.GetFilename() ) {
        There = true;
    }
}

    if( !There ) {
        CDoubleFiles dfFile( &amp;CurFile );
        pClComparedList-&gt;AddTail( dfFile );
    }
    else {
    dfTemp.AddPath( &amp;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&amp; CDoubleFiles::operator =( CDoubleFiles&amp; DoubleFiles )
{
ASSERT( this != &amp;DoubleFiles );

Filename = DoubleFiles.GetFileName();
Lenght   = DoubleFiles.GetLenght();

AllPath-&gt;RemoveAll();

AllPath-&gt;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);                        
}
</code></pre>
<p>So das wars. Hoffentlich ist es nicht zuviel auf einmal.<br />
Schon mal danke im voraus für alle Lösungs- bzw. Verbesserungsvorschläge.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/30581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/30581</guid><dc:creator><![CDATA[DaUsa]]></dc:creator><pubDate>Mon, 23 Jun 2003 07:56:00 GMT</pubDate></item><item><title><![CDATA[Reply to CList Problem - evt. Zuweisungsoperator on Mon, 23 Jun 2003 08:13:00 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">dfTemp = pClComparedList-&gt;GetNext( posTemp ); //Hier gibts die Referenz
</code></pre>
<p>Ja und wie ist dfTemp deklariert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/30582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/30582</guid><dc:creator><![CDATA[RenéG]]></dc:creator><pubDate>Mon, 23 Jun 2003 08:13:00 GMT</pubDate></item><item><title><![CDATA[Reply to CList Problem - evt. Zuweisungsoperator on Mon, 23 Jun 2003 08:18:00 GMT]]></title><description><![CDATA[<p>Naja...<br />
Als CDoubleFiles dfTemp;</p>
<p>Steht ganz oben.<br />
Soll das etwa heissen ich sollte das Ding so deklarieren<br />
CDoubleFiles&amp; dfTemp; //Naja, es müsste noch zugewiesen werden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/30583</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/30583</guid><dc:creator><![CDATA[DaUsa]]></dc:creator><pubDate>Mon, 23 Jun 2003 08:18:00 GMT</pubDate></item><item><title><![CDATA[Reply to CList Problem - evt. Zuweisungsoperator on Mon, 23 Jun 2003 08:25:00 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">// Bei dieser OP wird eine KOPIE angelegt !!!
CDoubleFiles dfTemp;
dfTemp = pClComparedList-&gt;GetNext( posTemp ); 
// das funzt net
CDoubleFiles&amp; dfTemp;
dfTemp = pClComparedList-&gt;GetNext( posTemp ); 
// mussu so machen
CDoubleFiles* dfTemp;
dfTemp = &amp;pClComparedList-&gt;GetNext( posTemp );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/30584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/30584</guid><dc:creator><![CDATA[RenéG]]></dc:creator><pubDate>Mon, 23 Jun 2003 08:25:00 GMT</pubDate></item><item><title><![CDATA[Reply to CList Problem - evt. Zuweisungsoperator on Mon, 23 Jun 2003 08:26:00 GMT]]></title><description><![CDATA[<p>Dankeschön...<br />
die einzige Möglichkeit die ich noch nicht ausprobiert hab...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/30585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/30585</guid><dc:creator><![CDATA[DaUsa]]></dc:creator><pubDate>Mon, 23 Jun 2003 08:26:00 GMT</pubDate></item></channel></rss>