<?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 zur Aufteilung von Quellcode in .h und .cpp]]></title><description><![CDATA[<p>Hallo,<br />
ich arbeite noch nicht lange mit C++. Allerdings verstehe ich den Sinn von cpp's nicht. Welches Vorteil hat es, Definitionen in eine .cpp Datei zu schreiben und die Deklaration in einen Header? Warum schreibt man nicht gleich alles in eine Header datei (mit includeguards). So wäre doch auch sichergestellt, dass alle andern Dateien, die den Code aus der Headerdatei brauchen, diesen kennen. Außerdem muss man ja auch zB template definitionen in den header schreiben.<br />
Wieso spaltet man also den code in h und cpp auf und schreibt nicht direkt alles in eine header datei und bindet sie in jede Datei ein, die den header braucht?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/248189/frage-zur-aufteilung-von-quellcode-in-h-und-cpp</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 06:18:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/248189.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 20 Aug 2009 18:27:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zur Aufteilung von Quellcode in .h und .cpp on Thu, 20 Aug 2009 18:27:44 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich arbeite noch nicht lange mit C++. Allerdings verstehe ich den Sinn von cpp's nicht. Welches Vorteil hat es, Definitionen in eine .cpp Datei zu schreiben und die Deklaration in einen Header? Warum schreibt man nicht gleich alles in eine Header datei (mit includeguards). So wäre doch auch sichergestellt, dass alle andern Dateien, die den Code aus der Headerdatei brauchen, diesen kennen. Außerdem muss man ja auch zB template definitionen in den header schreiben.<br />
Wieso spaltet man also den code in h und cpp auf und schreibt nicht direkt alles in eine header datei und bindet sie in jede Datei ein, die den header braucht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764292</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764292</guid><dc:creator><![CDATA[Aufteilung?]]></dc:creator><pubDate>Thu, 20 Aug 2009 18:27:44 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Aufteilung von Quellcode in .h und .cpp on Thu, 20 Aug 2009 18:35:43 GMT]]></title><description><![CDATA[<p>Schreib mal eine Anwendung nur aus Headern bestehend, und dann sag mir, wie das kompilieren so klappt. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764295</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764295</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Thu, 20 Aug 2009 18:35:43 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Aufteilung von Quellcode in .h und .cpp on Thu, 20 Aug 2009 18:41:09 GMT]]></title><description><![CDATA[<p>Dafür gibt's gleich mehrere Gründe, hier nach gefühlter Wichtigkeit sortiert:</p>
<ol>
<li>Man muss nicht jedes mal alles neu kompilieren, wenn man eine Änderung macht.</li>
<li>Man kann überhaupt Bibliotheken verwenden (im Sinne von dynamisch linken)</li>
<li>Man kann Änderungen in der Implementierung machen und alle Programme die dynamisch gegen die bibliothek linken bekommen den neuen Code</li>
<li>Man kann in den .h Dateien nachschlagen, wie das Interface aussieht, ohne seitenweise Code zu durchblättern.</li>
<li>Man kann Bibliotheken veröffentlichen, ohne dass deren Quellcode bekannt ist.</li>
</ol>
<p>Das ist, was mir gerade dazu einfällt. Fällt jemandem noch mehr ein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764296</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764296</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 20 Aug 2009 18:41:09 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Aufteilung von Quellcode in .h und .cpp on Thu, 20 Aug 2009 19:32:41 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Fällt jemandem noch mehr ein?</p>
</blockquote>
<ul>
<li>Teilweise ist es aufgrund gegenseitiger Abhängigkeiten gar nicht möglich, dass zuerst eine Klasse vollständig (inklusive aller Methoden) definiert wird und danach erst eine andere.</li>
<li>Meiner Meinung nach ist es für die Übersicht schlechter, wenn einfach etwas eingebunden wird, bzw. alles in einer einzigen .cpp-Datei. Indem ich die verwendeten Header für jedes Modul genau festlege, sehe ich auch, womit eine Implementierungsdatei arbeitet und benutze nicht aus Versehen Dinge, die gar nicht nötig wären.</li>
</ul>
]]></description><link>https://www.c-plusplus.net/forum/post/1764310</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764310</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 20 Aug 2009 19:32:41 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Aufteilung von Quellcode in .h und .cpp on Thu, 20 Aug 2009 20:49:16 GMT]]></title><description><![CDATA[<p>_matze schrieb:</p>
<blockquote>
<p>Schreib mal eine Anwendung nur aus Headern bestehend, und dann sag mir, wie das kompilieren so klappt. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Naja, dass es eine main.cpp gibt, ist ja wohl klar...</p>
<p>Nexus schrieb:</p>
<blockquote>
<ul>
<li>Teilweise ist es aufgrund gegenseitiger Abhängigkeiten gar nicht möglich, dass zuerst eine Klasse vollständig (inklusive aller Methoden) definiert wird und danach erst eine andere.</li>
</ul>
</blockquote>
<p>Und warum nicht so?</p>
<pre><code class="language-cpp">// X.h

class A;
class B;

class A
{
    public: friend class B;
    B b;
};

class B
{
    public: friend class A;
    A a;
};
</code></pre>
<p>Aber die Punkte von SeppJ sind ziemlich einleuchtend. Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764353</guid><dc:creator><![CDATA[Aufteilung?]]></dc:creator><pubDate>Thu, 20 Aug 2009 20:49:16 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Aufteilung von Quellcode in .h und .cpp on Thu, 20 Aug 2009 21:58:06 GMT]]></title><description><![CDATA[<p>Aufteilung? schrieb:</p>
<blockquote>
<p>Und warum nicht so?</p>
</blockquote>
<p>Dein Beispiel würde nicht kompilieren, da bei der Deklaration <code>B b;</code> die Klasse <code>B</code> nicht vollständig definiert ist. Und was soll das <code>friend</code> bringen?</p>
<p>Aber ich meinte eigentlich eher etwas anderes, zum Beispiel <code>enum</code> s in der Klasse - diese können nämlich nicht vorwärtsdeklariert werden. Oder, wenn man innerhalb der Memberfunktionen vollständige Typen der anderen Klasse benötigt. Dann ist man gezwungen, wieder sowas zu machen:</p>
<pre><code class="language-cpp">class A { void FuncA(); };
class B { void FuncB(); };

void A::FuncA() {...}
void B::FuncB() {...}
</code></pre>
<p>Also eine künstliche Auftrennung. Dann kann man gerade so gut Implementierungs- und Headerdatei verwenden.</p>
<p>Aufteilung? schrieb:</p>
<blockquote>
<p>_matze schrieb:</p>
<blockquote>
<p>Schreib mal eine Anwendung nur aus Headern bestehend, und dann sag mir, wie das kompilieren so klappt. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Naja, dass es eine main.cpp gibt, ist ja wohl klar...</p>
</blockquote>
<p>Glaub mir, das Kompilieren ist auch nicht besonders lustig, wenn man nur eine einzige .cpp-Datei hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764375</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764375</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 20 Aug 2009 21:58:06 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Aufteilung von Quellcode in .h und .cpp on Thu, 20 Aug 2009 21:59:35 GMT]]></title><description><![CDATA[<p>Aufteilung? schrieb:</p>
<blockquote>
<p>Und warum nicht so?</p>
<pre><code class="language-cpp">// X.h

class A;
class B;

class A
{
    public: friend class B;
    B b;
};

class B
{
    public: friend class A;
    A a;
};
</code></pre>
</blockquote>
<p>Und wie willst du das jetzt aufteilen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764376</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 20 Aug 2009 21:59:35 GMT</pubDate></item></channel></rss>