<?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[Rekursive Definitionen]]></title><description><![CDATA[<p>Hallo Freunde,</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">class Class1
{
 Class1(Class2* p_Class2);
}

class Class2
{
 Class2(Class1* p_Class1);
}
</code></pre>
<p>Gibts n hübschen Artikel zu diesem Thema? Welche Lösungsansätze es gibt, und was welche Vorteile/Nachteile hat?</p>
<p>Bei</p>
<pre><code class="language-cpp">class Class2;

class Class1
{
 Class1(Class2* p_Class2);
}

class Class2
{
 Class2(Class1* p_Class1);
}
</code></pre>
<p>Krieg ich z.B. vom Compiler eine Warnung, wenn ich z.B. in Class1 einen Class2 Pointer delete.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/299587/rekursive-definitionen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 13 Aug 2026 05:31:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/299587.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 14 Feb 2012 15:07:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Rekursive Definitionen on Tue, 14 Feb 2012 15:07:07 GMT]]></title><description><![CDATA[<p>Hallo Freunde,</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">class Class1
{
 Class1(Class2* p_Class2);
}

class Class2
{
 Class2(Class1* p_Class1);
}
</code></pre>
<p>Gibts n hübschen Artikel zu diesem Thema? Welche Lösungsansätze es gibt, und was welche Vorteile/Nachteile hat?</p>
<p>Bei</p>
<pre><code class="language-cpp">class Class2;

class Class1
{
 Class1(Class2* p_Class2);
}

class Class2
{
 Class2(Class1* p_Class1);
}
</code></pre>
<p>Krieg ich z.B. vom Compiler eine Warnung, wenn ich z.B. in Class1 einen Class2 Pointer delete.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2181054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2181054</guid><dc:creator><![CDATA[Hobo]]></dc:creator><pubDate>Tue, 14 Feb 2012 15:07:07 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursive Definitionen on Tue, 14 Feb 2012 15:19:37 GMT]]></title><description><![CDATA[<p>Du kannst schonmal nicht paarweise ein Objekt einer anderen Klassen darin einbetten.<br />
Mit Pointern müsste das aber gehen! Was willst du genau wissen? Was ist dein Nutzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2181067</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2181067</guid><dc:creator><![CDATA[PhilippHToner]]></dc:creator><pubDate>Tue, 14 Feb 2012 15:19:37 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursive Definitionen on Tue, 14 Feb 2012 15:20:54 GMT]]></title><description><![CDATA[<p>Kannst du dein Problem detaillierter beschreiben? Was genau möchtest du lösen? Zirkuläre Beziehungen sind vom Design her an sich nicht so schön, aber manchmal geht es nicht anders. Konkrete Lösungen kann man da nur für konkrete Problemstellungen geben.</p>
<p>Und wieso sollte der Compiler dich warnen, wenn du in Class1 einen Class2 Pointer freigibst? Das ist doch völlig legal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2181069</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2181069</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Tue, 14 Feb 2012 15:20:54 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursive Definitionen on Tue, 14 Feb 2012 15:40:08 GMT]]></title><description><![CDATA[<p>Ich weiß nicht ganz was du willst. Das Erste ist überhaupt kein valides C++. Das Zweite nur unter der Bedingung, dass du die Methoden von Class1 die Class2 verwenden erst definierst, wenn Class2 ebenso definiert wurde.</p>
<p>Du wirst bei deiner Warnung sicherlich sowas in der Art gemacht haben:</p>
<pre><code class="language-cpp">class Class2;

class Class1
{
 Class1(Class2* p_Class2){
   delete p_Class2;//ganz falsch!
 }
}
</code></pre>
<p>Das ist so nicht erlaubt, da delete die Definition von Class2 braucht. Eine Vorwärtsdeklaration reicht nicht aus.</p>
<p>Im Vergleich ist das korrekt:</p>
<pre><code class="language-cpp">class Class2;

class Class1
{
 Class1(Class2* p_Class2);
}

class Class2
{
 Class2(Class1* p_Class1);
} 

//später...
Class1::Class1(Class2* p_Class2){
    delete p_Class2;//jetzt ist es erlaubt, da der Compiler hier Class2 bereits kennt!
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2181088</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2181088</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Tue, 14 Feb 2012 15:40:08 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursive Definitionen on Tue, 14 Feb 2012 16:06:40 GMT]]></title><description><![CDATA[<p>Ausgezeichnet, vielen Dank. Den delete Aufruf hatte ich tatsächlich in einer member Funktion in einem inline innerhalb der header.</p>
<p>Habe die Stelle bis jetzt noch nicht getestet. Aber vielen Dank, ich schieb das gleich dann in die cpp.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2181104</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2181104</guid><dc:creator><![CDATA[Hobo]]></dc:creator><pubDate>Tue, 14 Feb 2012 16:06:40 GMT</pubDate></item></channel></rss>