<?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[Call by Referenc mit this als Referenc]]></title><description><![CDATA[<p>Hi,</p>
<p>Ich da mal eine Frage. Ich würde gerne per Call by Reference einen Pointer auf aufgerufen Instanz selbst zurück geben:</p>
<pre><code>class DemoClass
{
public:
    DemoClass();
    int x;
    void setParam(const DemoClass &amp;param){
           param=this;
    }
};

int main(int argc, char *argv[])
{
    DemoClass *test1,*test2;
    test1-&gt;x=1;
    test2-&gt;x=2;
    test1-&gt;setParam(*test2);
    qDebug() &lt;&lt; test1-&gt;x;
    qDebug() &lt;&lt; test2-&gt;x;
};
</code></pre>
<p>Geht das? Ich bekomme z.B. folgende Fehlermeldung:<br />
`F:\Programmieren\Detection\main.cpp:28: Fehler: C2678: Bin„rer Operator '=': Es konnte kein Operator gefunden werden, der einen linksseitigen Operanden vom Typ 'const DemoClass' akzeptiert (oder keine geeignete Konvertierung m”glich)</p>
<p>....\Detection\main.cpp(30): kann 'DemoClass &amp;DemoClass::operator =(const DemoClass &amp;)' sein</p>
<p>bei Anpassung der Argumentliste '(const DemoClass, DemoClass *)'`</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/330380/call-by-referenc-mit-this-als-referenc</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Jul 2026 10:38:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/330380.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 07 Jan 2015 20:18:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Call by Referenc mit this als Referenc on Wed, 07 Jan 2015 20:18:08 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Ich da mal eine Frage. Ich würde gerne per Call by Reference einen Pointer auf aufgerufen Instanz selbst zurück geben:</p>
<pre><code>class DemoClass
{
public:
    DemoClass();
    int x;
    void setParam(const DemoClass &amp;param){
           param=this;
    }
};

int main(int argc, char *argv[])
{
    DemoClass *test1,*test2;
    test1-&gt;x=1;
    test2-&gt;x=2;
    test1-&gt;setParam(*test2);
    qDebug() &lt;&lt; test1-&gt;x;
    qDebug() &lt;&lt; test2-&gt;x;
};
</code></pre>
<p>Geht das? Ich bekomme z.B. folgende Fehlermeldung:<br />
`F:\Programmieren\Detection\main.cpp:28: Fehler: C2678: Bin„rer Operator '=': Es konnte kein Operator gefunden werden, der einen linksseitigen Operanden vom Typ 'const DemoClass' akzeptiert (oder keine geeignete Konvertierung m”glich)</p>
<p>....\Detection\main.cpp(30): kann 'DemoClass &amp;DemoClass::operator =(const DemoClass &amp;)' sein</p>
<p>bei Anpassung der Argumentliste '(const DemoClass, DemoClass *)'`</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436414</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436414</guid><dc:creator><![CDATA[flambert]]></dc:creator><pubDate>Wed, 07 Jan 2015 20:18:08 GMT</pubDate></item><item><title><![CDATA[Reply to Call by Referenc mit this als Referenc on Wed, 07 Jan 2015 20:22:23 GMT]]></title><description><![CDATA[<p>param ist eine const-Referenz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436415</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Wed, 07 Jan 2015 20:22:23 GMT</pubDate></item><item><title><![CDATA[Reply to Call by Referenc mit this als Referenc on Wed, 07 Jan 2015 20:22:27 GMT]]></title><description><![CDATA[<p>Was willst du genau machen? Deine Beschreibung und der Code wiedersprechen sich.</p>
<p>param ist const, daher kannst du ihm nichts zuweisen.<br />
this is ein Pointer, mit *this kriegst du eine Referenz auf das aktuelle Objekt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436416</guid><dc:creator><![CDATA[rencrenc]]></dc:creator><pubDate>Wed, 07 Jan 2015 20:22:27 GMT</pubDate></item><item><title><![CDATA[Reply to Call by Referenc mit this als Referenc on Wed, 07 Jan 2015 20:27:27 GMT]]></title><description><![CDATA[<p>Ja, sorry. Hab das &quot;const&quot; noch aus einem Versuch vergessen:</p>
<pre><code>class DemoClass
{
public:
    DemoClass();
    int x;
    void setParam(DemoClass &amp;param){
           param=*this;
    }
};

int main(int argc, char *argv[])
{
    DemoClass *test1,*test2;
    test1-&gt;x=1;
    test2-&gt;x=2;
    test1-&gt;setParam(*test2);
    qDebug() &lt;&lt; test1-&gt;x;
    test1-&gt;x=99;
    qDebug() &lt;&lt; test2-&gt;x;
};
</code></pre>
<p>Ich würde erwarten (hoffen), dass bei der zweiten Ausgabe &quot;99&quot; ausgegeben wird. Wird so klarer was ich meine?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436417</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436417</guid><dc:creator><![CDATA[flambert]]></dc:creator><pubDate>Wed, 07 Jan 2015 20:27:27 GMT</pubDate></item><item><title><![CDATA[Reply to Call by Referenc mit this als Referenc on Wed, 07 Jan 2015 20:31:54 GMT]]></title><description><![CDATA[<p>In Zeile 7 weist du param eine Kopie des aktuellen Objekts zu. param ist eine Referenz auf den Wert des (uninitialisierten!) Zeigers test2.<br />
Das weißt nicht dem (uninitalisierten!) Zeiger eine neue Adresse zu, dazu musst du wirklich Zeiger verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436418</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436418</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Wed, 07 Jan 2015 20:31:54 GMT</pubDate></item><item><title><![CDATA[Reply to Call by Referenc mit this als Referenc on Wed, 07 Jan 2015 20:52:25 GMT]]></title><description><![CDATA[<p>O.k. Das mit den unitialisierten Zeigern ist sicher schon mal ein Fehler:-)</p>
<pre><code>class DemoClass
{
public:
    DemoClass();
    int x;
    void setParam(DemoClass &amp;param);
};

DemoClass::DemoClass()
{

}

void DemoClass::setParam(DemoClass &amp;param)
{
    param=*this;
}

int main(int argc, char *argv[])
{
    DemoClass *test1 = new DemoClass();
    DemoClass *test2 = new DemoClass();
    test1-&gt;x=1;
    test2-&gt;x=2;
    test1-&gt;setParam(*test2);
    qDebug() &lt;&lt; test1-&gt;x;
    test1-&gt;x=99;
    qDebug() &lt;&lt; test2-&gt;x;
}
</code></pre>
<p>Aber könntest du mir das mit den</p>
<blockquote>
<p>dazu musst du wirklich Zeiger verwenden</p>
</blockquote>
<p>etwas näher erklären. Ich bin äußerst Schwach auf der Brust was Pointer betrifft.</p>
<p>Vielen Dank im Vorraus (und auch für die bisherigen Antworten).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436428</guid><dc:creator><![CDATA[flambert]]></dc:creator><pubDate>Wed, 07 Jan 2015 20:52:25 GMT</pubDate></item><item><title><![CDATA[Reply to Call by Referenc mit this als Referenc on Wed, 07 Jan 2015 20:57:52 GMT]]></title><description><![CDATA[<p>flambert schrieb:</p>
<blockquote>
<p>O.k. Das mit den unitialisierten Zeigern ist sicher schon mal ein Fehler:-)</p>
<pre><code>class DemoClass
{
public:
    DemoClass();
    int x;
    void setParam(DemoClass &amp;param);
};

DemoClass::DemoClass()
{

}

void DemoClass::setParam(DemoClass &amp;param)
{
    param=*this;
}

int main(int argc, char *argv[])
{
    DemoClass *test1 = new DemoClass();
    DemoClass *test2 = new DemoClass();
    test1-&gt;x=1;
    test2-&gt;x=2;
    test1-&gt;setParam(*test2);
    qDebug() &lt;&lt; test1-&gt;x;
    test1-&gt;x=99;
    qDebug() &lt;&lt; test2-&gt;x;
}
</code></pre>
<p>Aber könntest du mir das mit den</p>
<blockquote>
<p>dazu musst du wirklich Zeiger verwenden</p>
</blockquote>
<p>etwas näher erklären. Ich bin äußerst Schwach auf der Brust was Pointer betrifft.</p>
</blockquote>
<p>Wieso verwendest du dann Pointer, wenns unnötig ist (für die beiden Objekte)?<br />
Hier, ich zeigs dir:</p>
<pre><code>class DemoClass
{
public:
    DemoClass();
    int x;
    void setParam(DemoClass* &amp;param); // wir nehmen einen Pointer by Reference
};

DemoClass::DemoClass()
{

}

void DemoClass::setParam(DemoClass* &amp;param)
{
    param=this; // und lassen den auf this zeigen
}

int main(int argc, char *argv[])
{
    //DemoClass *test1 = new DemoClass();
    DemoClass test1; // kein new!
    test1-&gt;x=1;
    DemoClass *test2; // Pointer auf DemoClass
    test1.setParam(test2); // lassen wir auf test1 zeigen
    qDebug() &lt;&lt; test1-&gt;x;
    test1-&gt;x=99;
    qDebug() &lt;&lt; test2-&gt;x;
}
</code></pre>
<p>Wobei dafür eine Memberfunktion überflüssig ist, schließlich kann man auch direkt</p>
<pre><code>DemoClass* test2 = &amp;test1;
</code></pre>
<p>schreiben.</p>
<blockquote>
<p>Vielen Dank im v****** (und auch für die bisherigen Antworten).</p>
</blockquote>
<p>Es heißt Voraus. Ein R.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436430</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Wed, 07 Jan 2015 20:57:52 GMT</pubDate></item><item><title><![CDATA[Reply to Call by Referenc mit this als Referenc on Wed, 07 Jan 2015 21:03:54 GMT]]></title><description><![CDATA[<p>Tausend Dank. Ich war schon am Verzweifeln.</p>
<blockquote>
<p>Wobei dafür eine Memberfunktion überflüssig ist</p>
</blockquote>
<p>Ist nur ein minimal Beispiel. In meinem Programm durchsuche ich einen Suchbaum und würde das Ergebnis (nach ein paar hundert Zweigen) eben gerne auf diese Weise zurück geben.</p>
<p>Herzlichsten Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436431</guid><dc:creator><![CDATA[flambert]]></dc:creator><pubDate>Wed, 07 Jan 2015 21:03:54 GMT</pubDate></item><item><title><![CDATA[Reply to Call by Referenc mit this als Referenc on Thu, 08 Jan 2015 11:42:21 GMT]]></title><description><![CDATA[<p>Nur mal so als Tipp: das nächste mal, wenn Du Code und eine Fehlermeldung zeigst, sollte die Fehlermeldung zum Code passen. Deine Fehlermeldung bezieht sich auf Zeile 28, der Code hat allerdings nur 22 Zeilen. Ich wundere mich, dass andere sich da noch Mühe geben, Dir zu helfen, wenn Du Dir so wenig Mühe gibst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436496</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436496</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Thu, 08 Jan 2015 11:42:21 GMT</pubDate></item></channel></rss>