<?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[Frage zu Include Dateien]]></title><description><![CDATA[<p>Einen wunderschönen Guten Morgen.</p>
<p>Ich habe mal eine Frage bezüglich Include - Dateien. In C++ ist ja so das die Definition einer Klasse in einer .h Datei erfolgt, die genaue IMplementierung jedoch in der .cpp Datei ( Inline Funktionen ausgenommen). Binde ich nun eine weitere Klasse ein, so benötige ich ihre .h Datei. So nun gibt es meiner Meinung nach 2 Möglichkeiten dies zu realisieren :<br />
Möglichkeit 1 : Man bindet die .h Datei(der neunen Klasse) in die bestehende .h datei ein.<br />
Möglichkeit 2 : Man macht in der bestehenden .h Datei eine Forward Deklaration auf die neue Klasse und bindet dess .h datei erst in die .cpp Datei der bestehenden Klasse ein.</p>
<p>Welche Möglichkeit ist die Bessere ?<br />
Ich hoffe das war einigermaßen verständlich.</p>
<p>Vielen Dank</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/262242/frage-zu-include-dateien</link><generator>RSS for Node</generator><lastBuildDate>Sun, 06 Sep 2026 22:46:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/262242.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 03 Mar 2010 08:08:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu Include Dateien on Wed, 03 Mar 2010 08:08:18 GMT]]></title><description><![CDATA[<p>Einen wunderschönen Guten Morgen.</p>
<p>Ich habe mal eine Frage bezüglich Include - Dateien. In C++ ist ja so das die Definition einer Klasse in einer .h Datei erfolgt, die genaue IMplementierung jedoch in der .cpp Datei ( Inline Funktionen ausgenommen). Binde ich nun eine weitere Klasse ein, so benötige ich ihre .h Datei. So nun gibt es meiner Meinung nach 2 Möglichkeiten dies zu realisieren :<br />
Möglichkeit 1 : Man bindet die .h Datei(der neunen Klasse) in die bestehende .h datei ein.<br />
Möglichkeit 2 : Man macht in der bestehenden .h Datei eine Forward Deklaration auf die neue Klasse und bindet dess .h datei erst in die .cpp Datei der bestehenden Klasse ein.</p>
<p>Welche Möglichkeit ist die Bessere ?<br />
Ich hoffe das war einigermaßen verständlich.</p>
<p>Vielen Dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1863610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1863610</guid><dc:creator><![CDATA[Fischkopf2009]]></dc:creator><pubDate>Wed, 03 Mar 2010 08:08:18 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Include Dateien on Wed, 03 Mar 2010 08:13:40 GMT]]></title><description><![CDATA[<p>Möglichkeit 2 ist besser.</p>
<p>Änderst du einen Header, &quot;ändern&quot; sich auch alle Dateien, in denen der Header eingebunden ist.<br />
Bindest du den Header in einer .cpp ein, muss diese cpp neu kompiliert werden. Bindest du ihn aber in einem anderen Header ein, müssen alle Dateien, die wiederrum diesen Header einbinden, neu kompiliert werden. Das kann sich dann beliebig fortsetzen.</p>
<p>Ich hoffe das war einigermaßen verständlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1863613</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1863613</guid><dc:creator><![CDATA[zwutz]]></dc:creator><pubDate>Wed, 03 Mar 2010 08:13:40 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Include Dateien on Wed, 03 Mar 2010 08:15:45 GMT]]></title><description><![CDATA[<p>Wenn möglich eine Forward Decl., Header einbinden erst im CPP.<br />
Ansonsten direkt Header in Header einbinden.</p>
<p>Forward Decl. minimieren Abhängigkeiten und sparen obendrein Kompilierzeit.</p>
<p>Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1863614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1863614</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Wed, 03 Mar 2010 08:15:45 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Include Dateien on Wed, 03 Mar 2010 08:16:38 GMT]]></title><description><![CDATA[<p>Fischkopf2009 schrieb:</p>
<blockquote>
<p>Einen wunderschönen Guten Morgen.</p>
<p>Ich habe mal eine Frage bezüglich Include - Dateien. In C++ ist ja so das die Definition einer Klasse in einer .h Datei erfolgt, die genaue IMplementierung jedoch in der .cpp Datei ( Inline Funktionen ausgenommen). Binde ich nun eine weitere Klasse ein, so benötige ich ihre .h Datei. So nun gibt es meiner Meinung nach 2 Möglichkeiten dies zu realisieren :<br />
Möglichkeit 1 : Man bindet die .h Datei(der neunen Klasse) in die bestehende .h datei ein.<br />
Möglichkeit 2 : Man macht in der bestehenden .h Datei eine Forward Deklaration auf die neue Klasse und bindet dess .h datei erst in die .cpp Datei der bestehenden Klasse ein.</p>
<p>Welche Möglichkeit ist die Bessere ?</p>
</blockquote>
<p>Die zweite. Solang du die Definition der zweiten Klasse im Header nicht brauchst, hat der include dort auch nichts zu suchen. Wenn du die Definition der zweiten Klassen ändern würdest, müsstest du sonst nicht nur die .cpp der ersten Klasse neu compilieren, sondern alle .cpps, die den header der ersten Klasse einbinden, weil sie ja indirekt dann auch den Header der wzeiten Klasse einbinden.</p>
<p>siehe auch hier:<br />
<a href="http://www.gotw.ca/gotw/007.htm" rel="nofollow">http://www.gotw.ca/gotw/007.htm</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1863615</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1863615</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 03 Mar 2010 08:16:38 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Include Dateien on Wed, 03 Mar 2010 08:23:33 GMT]]></title><description><![CDATA[<p>Die beste Möglichkeit ist: Forward-Declaration wann möglich.<br />
Die genaue Definition der Klasse wird nur benötigt, wenn der Compiler die exakte Größe eines Objektes wissen muss (Member als Value) oder wenn auf ein Objekt zugegriffen wird (-&gt;Schnittstelle).</p>
<p>Wenn du eine Klasse nur einer Funktion übergibst oder returnst (egal ob Pointer/Referenz/Value) oder nen Pointer/Referenz als Member hast -&gt; Forward-Declaration.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1863617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1863617</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Wed, 03 Mar 2010 08:23:33 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Include Dateien on Wed, 03 Mar 2010 08:26:24 GMT]]></title><description><![CDATA[<p>Fischkopf2009 schrieb:</p>
<blockquote>
<p>In C++ ist ja so das die Definition einer Klasse in einer .h Datei erfolgt, die genaue IMplementierung jedoch in der .cpp Datei ( Inline Funktionen ausgenommen).</p>
</blockquote>
<p>Du kannst natürlich auch eine Klasse in einer cpp-Datei definieren, wenn Du sie nur intern benutzt.</p>
<p>Fischkopf2009 schrieb:</p>
<blockquote>
<p>Binde ich nun eine weitere Klasse ein, so benötige ich ihre .h Datei. So nun gibt es meiner Meinung nach 2 Möglichkeiten dies zu realisieren :<br />
Möglichkeit 1 : Man bindet die .h Datei(der neunen Klasse) in die bestehende .h datei ein.<br />
Möglichkeit 2 : Man macht in der bestehenden .h Datei eine Forward Deklaration auf die neue Klasse und bindet dess .h datei erst in die .cpp Datei der bestehenden Klasse ein.</p>
<p>Welche Möglichkeit ist die Bessere ?</p>
</blockquote>
<p>Manchmal hast Du keine Wahl. Manchmal musst Du Möglichkeit 1 benutzen. Wenn Du eine Klasse nur deklarierst, ist das erstmal nur ein unvollständiger Typ. Du kannst natürlich keine Objekte von unvollständigen Typen anlegen (innerhalb einer Funktion auf'm Stack oder als Mitglied einer anderen Klasse).</p>
<pre><code class="language-cpp">struct foo; // &lt;-- unvollständiger Typ

struct bar {
   foo f; // nicht erlaubt
};

struct baz {
   foo* f; // OK, das ist erlaubt
};
</code></pre>
<p>Zu Möglichkeit 2: Ich würde nie Deklarationen von Typen in eine Header-Datei schreiben, &quot;die dafür nicht zuständig ist&quot;. Du kannst Deklaration und Definition einer Klasse in zwei Header-Dateien aufteilen. So, wird es zB auch in der Std-Lib gemacht. Es gibt den <a href="http://stdcxx.apache.org/doc/stdlibref/iosfwd-h.html" rel="nofollow">&lt;iosfwd&gt;</a>-Header, der nur I/O-bezogene Deklarationen von Klassen und Klassen-Templates enthält. Manchmal braucht man auch nicht mehr. Dann ist es schon von Vorteil, es so zu machen, da es Kompilierzeit sparen kann.</p>
<p>Tipp: Es lohnt sich, mal die &quot;one definition rule&quot; durchgelesen zu haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1863618</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1863618</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 03 Mar 2010 08:26:24 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Include Dateien on Wed, 03 Mar 2010 08:36:10 GMT]]></title><description><![CDATA[<p>Mensch danke für die vielen Antworten.</p>
<p>Ich habe das bisher auch so gemacht. nur bei der Vererbung bin ich auf Möglichkeit 1 angewiesen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1863621</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1863621</guid><dc:creator><![CDATA[Fischkopf2009]]></dc:creator><pubDate>Wed, 03 Mar 2010 08:36:10 GMT</pubDate></item></channel></rss>