<?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[Forward Declaration einer Subklasse]]></title><description><![CDATA[<p>Angenommen ich habe eine Klasse, die ich in einer anderen Klasse benutzen will. Dann kann ich die Klasse einfach mit #include in der Header-Datei einbinden oder aber ich binde sie erst in der CPP-Datei ein und mache eine Forward Declaration.<br />
So z.B.</p>
<p>Header:</p>
<pre><code class="language-cpp">namespace myNamespace
{
  class myClass;
}
</code></pre>
<p>CPP:</p>
<pre><code class="language-cpp">#include &quot;myPackage/include/myClass.h&quot;
</code></pre>
<p>Angenommen ich habe nun eine Klasse MyClass1::MySubClass1, die ich in einer Header-Datei als Forward-Deklaration einfügen will. Wie mache ich das? Mir fällt nur die Lösung ein, direkt in der Header-Datei</p>
<pre><code class="language-cpp">#include &quot;myPackage/include/fileOfMySubClass1.h&quot;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/253166/forward-declaration-einer-subklasse</link><generator>RSS for Node</generator><lastBuildDate>Mon, 14 Sep 2026 01:07:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/253166.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 29 Oct 2009 14:13:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Forward Declaration einer Subklasse on Thu, 29 Oct 2009 14:13:40 GMT]]></title><description><![CDATA[<p>Angenommen ich habe eine Klasse, die ich in einer anderen Klasse benutzen will. Dann kann ich die Klasse einfach mit #include in der Header-Datei einbinden oder aber ich binde sie erst in der CPP-Datei ein und mache eine Forward Declaration.<br />
So z.B.</p>
<p>Header:</p>
<pre><code class="language-cpp">namespace myNamespace
{
  class myClass;
}
</code></pre>
<p>CPP:</p>
<pre><code class="language-cpp">#include &quot;myPackage/include/myClass.h&quot;
</code></pre>
<p>Angenommen ich habe nun eine Klasse MyClass1::MySubClass1, die ich in einer Header-Datei als Forward-Deklaration einfügen will. Wie mache ich das? Mir fällt nur die Lösung ein, direkt in der Header-Datei</p>
<pre><code class="language-cpp">#include &quot;myPackage/include/fileOfMySubClass1.h&quot;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1800241</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1800241</guid><dc:creator><![CDATA[gentlesea]]></dc:creator><pubDate>Thu, 29 Oct 2009 14:13:40 GMT</pubDate></item><item><title><![CDATA[Reply to Forward Declaration einer Subklasse on Thu, 29 Oct 2009 18:56:46 GMT]]></title><description><![CDATA[<p>Das ist leider nicht möglich, ich hätte das auch schon benötigt. <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-234000.html" rel="nofollow">Hier</a> gab es eine Diskussion zu diesem Thema.</p>
<p>Grundsätzlich hast du drei Möglichkeiten:</p>
<ul>
<li>Zusätzliche Abhängigkeit durch Inkludieren des Headers in Kauf nehmen</li>
<li>Typinformation mit <code>void*</code> über Bord werfen</li>
<li>Verschachtelte Klasse entschachteln und als eigenständigen Typen realisieren</li>
</ul>
<p>Ich rate dir zur dritten Möglichkeit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1800387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1800387</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 29 Oct 2009 18:56:46 GMT</pubDate></item><item><title><![CDATA[Reply to Forward Declaration einer Subklasse on Fri, 30 Oct 2009 07:47:31 GMT]]></title><description><![CDATA[<p>Die 3. Möglichkeit finde ich auch am Besten, leider darf ich an diesem Code nichts ändern, da es nicht meiner ist.<br />
Die 2. Möglichkeit hätte zur Folge, dass ich an allen Stellen wo mit Zeigern auf Variablen des verschachtelten Typs gearbeitet wird, einen Cast vornehmen müßte. Rein interessehalber: Müßte das dann ein normaler C-Cast sein oder sollte man da besser einen anderen Cast nehmen?<br />
Ich werde wohl aus pragmatischen Gründen die 1. Möglichkeit verwenden müssen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1800532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1800532</guid><dc:creator><![CDATA[gentlesea]]></dc:creator><pubDate>Fri, 30 Oct 2009 07:47:31 GMT</pubDate></item><item><title><![CDATA[Reply to Forward Declaration einer Subklasse on Fri, 30 Oct 2009 08:26:56 GMT]]></title><description><![CDATA[<p>gentlesea schrieb:</p>
<blockquote>
<p>Rein interessehalber: Müßte das dann ein normaler C-Cast sein oder sollte man da besser einen anderen Cast nehmen?</p>
</blockquote>
<p>All das, was Du mit einem C-style cast machen kannst, kannst Du auch mit einem C++-Cast machen. Der Unterschied ist der, dass man beim C++-Cast sofort auf dem ersten Blick sieht, was der eigentlich machen soll, wobei ein C-style cast &quot;alles&quot; machen kann -- von einfachen und relativ sicheren statischen casts bis zu den gefährlichen const- und reinterpret casts. Hier würde ein static_cast reichen. Da die Typinformation mit void verloren geht, ist es wichtig, dass der Zeigertyp hinterher wieder derselbe ist:</p>
<pre><code>T      *  --&gt;  void      *  --&gt;  T*
oder   T const*  --&gt;  void const*  --&gt;  T const*
</code></pre>
<p>und nicht so etwas:</p>
<pre><code>Derived *  --&gt;  void *  --&gt;  Base *   (Pfui!)
</code></pre>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1800549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1800549</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Fri, 30 Oct 2009 08:26:56 GMT</pubDate></item></channel></rss>