<?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[Vorwärtsdeklarationen]]></title><description><![CDATA[<p>Ich will bisschen darauf achten, sauber mit includes / Vorwärtsdeklarationen zu arbeiten. Dazu habe ich bisher folgendes festgelegt:</p>
<p>- Soweit möglich (Ausnahme: Inline-Methoden) werden Klassennamen für eigene Klassen immer mit einer Vorwärtsdeklaration bekannt gemacht.</p>
<p>- In der Implementierung der jeweiligen Klasse (*.cpp-Datei), werden die Klassen dann tatsächlich inkludiert.</p>
<p>Sollte ein guter Leitfaden sein, oder?<br />
Wie wird das jetzt aber handgehabt, wenn man z.B. mit der WinAPI arbeitet? Da gibt es sehr viele typedefs, wenn ich jetzt eine Klasse in einem Header deklariere, kann ich den Typen nicht nutzen, ohne &quot;windows.h&quot; zu inkludieren. Soll ich hier eine Ausnahme machen, oder gibt es einen anderen weg?</p>
<p>Wie verhält es sich mit der Standardbibliothek? Eine using-Direktive würde z.B. std::vector für alle Dateien sichtbar machen, die meinen Header inkludieren. Wie kann ich eine Vorwärtsdeklaration für eine Klasse in einem Namespace schreiben? Oder gibt es für die beiden Punkte andere Lösungsansätze?</p>
<p>Danke im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/210509/vorwärtsdeklarationen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 13 Oct 2026 14:39:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/210509.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 11 Apr 2008 18:28:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vorwärtsdeklarationen on Fri, 11 Apr 2008 18:28:28 GMT]]></title><description><![CDATA[<p>Ich will bisschen darauf achten, sauber mit includes / Vorwärtsdeklarationen zu arbeiten. Dazu habe ich bisher folgendes festgelegt:</p>
<p>- Soweit möglich (Ausnahme: Inline-Methoden) werden Klassennamen für eigene Klassen immer mit einer Vorwärtsdeklaration bekannt gemacht.</p>
<p>- In der Implementierung der jeweiligen Klasse (*.cpp-Datei), werden die Klassen dann tatsächlich inkludiert.</p>
<p>Sollte ein guter Leitfaden sein, oder?<br />
Wie wird das jetzt aber handgehabt, wenn man z.B. mit der WinAPI arbeitet? Da gibt es sehr viele typedefs, wenn ich jetzt eine Klasse in einem Header deklariere, kann ich den Typen nicht nutzen, ohne &quot;windows.h&quot; zu inkludieren. Soll ich hier eine Ausnahme machen, oder gibt es einen anderen weg?</p>
<p>Wie verhält es sich mit der Standardbibliothek? Eine using-Direktive würde z.B. std::vector für alle Dateien sichtbar machen, die meinen Header inkludieren. Wie kann ich eine Vorwärtsdeklaration für eine Klasse in einem Namespace schreiben? Oder gibt es für die beiden Punkte andere Lösungsansätze?</p>
<p>Danke im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1490538</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1490538</guid><dc:creator><![CDATA[++Decl]]></dc:creator><pubDate>Fri, 11 Apr 2008 18:28:28 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklarationen on Fri, 11 Apr 2008 19:44:47 GMT]]></title><description><![CDATA[<p>Vorwärtsdeklarationen auf Klassen in Namespaces gehen so:</p>
<pre><code class="language-cpp">namespace _namespacename
{
    class _classname;
}
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /></p>
<p>Ich stelle mir gerade eine weitere Frage:<br />
Soll ich alle Header, dich ich für meine Klasse brauche, im Klassenheader, oder ggf. erst im Cpp-File inkludieren? Also verteilen. Was im Klassenheader gebraucht wird, wird dort inkludiert, was ich im Cpp-File brauche, binde ich dort ein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1490581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1490581</guid><dc:creator><![CDATA[++Decl]]></dc:creator><pubDate>Fri, 11 Apr 2008 19:44:47 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklarationen on Sat, 12 Apr 2008 09:53:26 GMT]]></title><description><![CDATA[<p>Du solltest, soweit es geht, die Abhängigkeiten immer möglichst gering halten, d.h. so wenig wie möglich in den Header-Files einbinden.</p>
<p>Wenn du nur ein Projekt für dich selber machst, ist das ja kein Problem. Sobald du aber daraus eine DLL o.ä. erzeugst, so sollte das aufrufende Programm gerade nur die benötigten Klassen und typedefs etc. kennen (bei Templates ist das etwas anderes, diese müssen komplett in die Header).</p>
<p>Du solltest &quot;using&quot; auch nicht global in deinen Headern verwenden, sondern wenn überhaupt, dann in den Namespaces:</p>
<pre><code class="language-cpp">namespace XYZ
{
  using std::vector;
}
</code></pre>
<p>Aber eigentlich ist es für Header-Dateien besser, wenn dort die externen Namespaces explizit ausgeschrieben werden.</p>
<p>Ein großes Problem ist wirklich &lt;windows.h&gt;, da dies ein reiner C-Header ist (besonders die MAKROS sind der Horror!).<br />
Es ist eigentlich der ANTI-Prototyp eines guten Headers (da er der Ober-Header für zig andere Header darstellt - je nachdem welche MAKROS gesetzt sind).</p>
<p>Versuch am besten deine Klassen so zu kapseln, daß du in den reinen Logikklassen keinerlei Verwendung für &lt;windows.h&gt; benötigst, sondern verwende stattdessen dort die Klassen und Typen der Standard C++ Bibliothek.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1490710</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1490710</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Sat, 12 Apr 2008 09:53:26 GMT</pubDate></item></channel></rss>