<?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[Wieso Header in cpp inkludieren?]]></title><description><![CDATA[<p>Mahlzeit,</p>
<p>Wieso ich meinen Code in .h und .cpp splitten soll ist mir einigermassen klar: Damit ich Typen/Funktionen, die in Foo.cpp definiert sind, einfach durch Inklusion von Foo.h benutzen kann, oder?</p>
<p>Was ich nicht verstehe: Wieso muss ich in Foo.cpp auch Foo.h inkludieren? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/310346/wieso-header-in-cpp-inkludieren</link><generator>RSS for Node</generator><lastBuildDate>Tue, 04 Aug 2026 19:21:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/310346.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 09 Nov 2012 10:44:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wieso Header in cpp inkludieren? on Fri, 09 Nov 2012 10:44:34 GMT]]></title><description><![CDATA[<p>Mahlzeit,</p>
<p>Wieso ich meinen Code in .h und .cpp splitten soll ist mir einigermassen klar: Damit ich Typen/Funktionen, die in Foo.cpp definiert sind, einfach durch Inklusion von Foo.h benutzen kann, oder?</p>
<p>Was ich nicht verstehe: Wieso muss ich in Foo.cpp auch Foo.h inkludieren? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269212</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269212</guid><dc:creator><![CDATA[Marlin]]></dc:creator><pubDate>Fri, 09 Nov 2012 10:44:34 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso Header in cpp inkludieren? on Fri, 09 Nov 2012 10:49:31 GMT]]></title><description><![CDATA[<p>bob.h</p>
<pre><code class="language-cpp">class foo
{
public:
void sup();
};
</code></pre>
<p>bob.cpp</p>
<pre><code class="language-cpp">#include &quot;bob.h&quot;

void foo :: sup ( )
{
...
}
</code></pre>
<p>Ohne das include wüsste bob.cpp nichts von der Klasse foo.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269213</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269213</guid><dc:creator><![CDATA[O_O]]></dc:creator><pubDate>Fri, 09 Nov 2012 10:49:31 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso Header in cpp inkludieren? on Fri, 09 Nov 2012 10:52:56 GMT]]></title><description><![CDATA[<p>Und wenn sich Deklarationen in .h und .c unterscheiden, z.B. wegen Weiterentwicklung, meckert der Compiler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269214</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269214</guid><dc:creator><![CDATA[DirkB]]></dc:creator><pubDate>Fri, 09 Nov 2012 10:52:56 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso Header in cpp inkludieren? on Fri, 09 Nov 2012 10:54:49 GMT]]></title><description><![CDATA[<p>Marlin schrieb:</p>
<blockquote>
<p>Wieso muss ich in Foo.cpp auch Foo.h inkludieren? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
</blockquote>
<p>Der Compiler weiß nicht, dass Foo.cpp und Foo.h zusammen gehören, die haben nur zufällig ähnliche Namen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269216</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269216</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Fri, 09 Nov 2012 10:54:49 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso Header in cpp inkludieren? on Fri, 09 Nov 2012 10:58:06 GMT]]></title><description><![CDATA[<p>Also ist der eigentliche Grund, dass vor einer Definition IMMER eine Deklaration kommen muss?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269217</guid><dc:creator><![CDATA[Marlin]]></dc:creator><pubDate>Fri, 09 Nov 2012 10:58:06 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso Header in cpp inkludieren? on Fri, 09 Nov 2012 11:02:55 GMT]]></title><description><![CDATA[<p><a href="http://www.c-plusplus.net/forum/61231-full" rel="nofollow">http://www.c-plusplus.net/forum/61231-full</a></p>
<p>EDIT: &lt; 5 Sekunden bei Google</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269219</guid><dc:creator><![CDATA[xStrykex]]></dc:creator><pubDate>Fri, 09 Nov 2012 11:02:55 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso Header in cpp inkludieren? on Fri, 09 Nov 2012 11:01:45 GMT]]></title><description><![CDATA[<p>Marlin schrieb:</p>
<blockquote>
<p>Also ist der eigentliche Grund, dass vor einer Definition IMMER eine Deklaration kommen muss?</p>
</blockquote>
<p>Richtig</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269220</guid><dc:creator><![CDATA[O_O]]></dc:creator><pubDate>Fri, 09 Nov 2012 11:01:45 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso Header in cpp inkludieren? on Fri, 09 Nov 2012 11:04:25 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title="O_O"
      alt="😮"
    /> schrieb:</p>
<blockquote>
<p>Marlin schrieb:</p>
<blockquote>
<p>Also ist der eigentliche Grund, dass vor einer Definition IMMER eine Deklaration kommen muss?</p>
</blockquote>
<p>Richtig</p>
</blockquote>
<p>Aber folgendes ist doch gueltig:</p>
<pre><code>...

void foo() {
   cout &lt;&lt; &quot;foo&quot;;
}

int main() {
   foo();
}
</code></pre>
<p>Hier muss ich ja auch nicht vor der foo() Definition foo deklarieren (sprich void foo(); )<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269222</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269222</guid><dc:creator><![CDATA[Marlin]]></dc:creator><pubDate>Fri, 09 Nov 2012 11:04:25 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso Header in cpp inkludieren? on Fri, 09 Nov 2012 11:05:30 GMT]]></title><description><![CDATA[<p>Definition auch gleich Deklaration</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269224</guid><dc:creator><![CDATA[xStrykex]]></dc:creator><pubDate>Fri, 09 Nov 2012 11:05:30 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso Header in cpp inkludieren? on Fri, 09 Nov 2012 11:06:55 GMT]]></title><description><![CDATA[<p>Er geht von oben nach unten, und wenn er unten angekommen ist war er ja schon oben und weis das es eben genau foo() schon gibt..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269226</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269226</guid><dc:creator><![CDATA[Flutscherino]]></dc:creator><pubDate>Fri, 09 Nov 2012 11:06:55 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso Header in cpp inkludieren? on Fri, 09 Nov 2012 11:07:08 GMT]]></title><description><![CDATA[<p>Wieso muss ich dann vor der Definition einer Methode Foo::method() (in Foo.cpp) den Foo Header Foo.h in Foo.cpp inkludieren, wenn die Definition eh auch schon die Deklartion ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269227</guid><dc:creator><![CDATA[Marlin]]></dc:creator><pubDate>Fri, 09 Nov 2012 11:07:08 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso Header in cpp inkludieren? on Fri, 09 Nov 2012 11:07:55 GMT]]></title><description><![CDATA[<p>Du musst den Header keineswegs immer includen. Nur wenn der Inhalt in der Implementierung verwendet wird, z.B enums, typedefs, Klassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269228</guid><dc:creator><![CDATA[Stefan2]]></dc:creator><pubDate>Fri, 09 Nov 2012 11:07:55 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso Header in cpp inkludieren? on Fri, 09 Nov 2012 11:09:14 GMT]]></title><description><![CDATA[<p>Versuchs mal so und schau was passiert: <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>
<pre><code class="language-cpp">int main() { 
    foo(); 
}

void foo() { 
    cout &lt;&lt; &quot;foo&quot;; 
}
</code></pre>
<p>Ja, es kommt zu einem Fehler warum das so ist hat Flutscherino ja schon erklärt.</p>
<p>Über das int main kommt halt noch void foo();</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269229</guid><dc:creator><![CDATA[O_O]]></dc:creator><pubDate>Fri, 09 Nov 2012 11:09:14 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso Header in cpp inkludieren? on Fri, 09 Nov 2012 11:10:56 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>also Du kannst alles auch einfach in eine C++-Datei schreiben, das klappt für die C++-Datei selbst auch. Du musst dann auch nicht zwischen Klassendefinition ohne Implementierung und Methodenimplementierung unterscheiden, beides würde funktionieren.</p>
<p>Wenn jetzt andere Übersetzungseinheiten (ÜE; .cpp-Dateien) jedoch diese Klasse nutzen möchten, kennen sie die Klasse nicht. Zwar könnte der Linker der anderen ÜE die Daten bekannt machen, da sie ja in einer anderen ÜE (unserer ersten .cpp-Datei) bekannt sind, jedoch erfordert dies zumindest eine Deklaration der Methoden.</p>
<p>Wie löst man das? Man schreibt die Deklaration der Klasse in eine Header-Datei und lässt diese einfach von jeder ÜE, welche die Implementation der Klasse nutzen möchte, inkludieren. Jetzt sieht der Linker für unsere zweite .cpp-Datei, welche die Klasse nutzen möchte, &quot;Hey, für das, was er nutzen will, gibt es Deklarationen... die Definitionen liegen hier nicht rum, dann schau ich Mal, ob es die in anderen ÜE gibt&quot;... Und dann findet er die.</p>
<p>Die ganze Geschichte ist etwas umständlich. Es gibt ja auch einige, die sich dafür aussprechen, diese Header/Cpp-Zweiteilung ggü. einem mir unbekannten besseren Ansatz auszutauschen, da es schon etwas lästig ist. Aber so ist es zurzeit halt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269230</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269230</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Fri, 09 Nov 2012 11:10:56 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso Header in cpp inkludieren? on Fri, 09 Nov 2012 11:21:59 GMT]]></title><description><![CDATA[<p>In diesem Fall musst du den Header nicht im cpp inkludieren:</p>
<pre><code>// .h
int negate(int i);
</code></pre>
<pre><code>// .cpp

int negate(int i)
{
  return -i;
}
</code></pre>
<p>Die Implementierung im .cpp muss die Deklaration im .h nicht kennen. Wenn Du bei einer Klasse die Implementierung auslagern willst, sieht es natürlich anders aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269234</guid><dc:creator><![CDATA[__Stefan__]]></dc:creator><pubDate>Fri, 09 Nov 2012 11:21:59 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso Header in cpp inkludieren? on Fri, 09 Nov 2012 11:47:52 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>also Du kannst alles auch einfach in eine C++-Datei schreiben, das klappt für die C++-Datei selbst auch. Du musst dann auch nicht zwischen Klassendefinition ohne Implementierung und Methodenimplementierung unterscheiden, beides würde funktionieren.</p>
</blockquote>
<p>Trotzdem muss erst eine Klassendefinition her, oder nicht?<br />
Oder würde:<br />
bla.cpp:</p>
<pre><code>...
void foo::method()
{
}

class foo
{
   void method();
};

...
</code></pre>
<p>funktionieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269249</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Fri, 09 Nov 2012 11:47:52 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso Header in cpp inkludieren? on Fri, 09 Nov 2012 12:39:31 GMT]]></title><description><![CDATA[<p>In foo.h stehen nicht nur deklar</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title="O_O"
      alt="😮"
    /> schrieb:</p>
<blockquote>
<p>Marlin schrieb:</p>
<blockquote>
<p>Also ist der eigentliche Grund, dass vor einer Definition IMMER eine Deklaration kommen muss?</p>
</blockquote>
<p>Richtig</p>
</blockquote>
<p>Nein, komplett falsch. Man braucht keine Deklarationen vor einer entsprechenden Definition, weil wie schon gesagt wurde die Definition selber auch eine Deklaration ist (edit: Ausnahme Definitionen von Methoden außerhalb der Klasse).</p>
<p>Aber was du in foo.cpp nicht hast, dafür aber im Header ist die <em>Definition</em> der Klasse Foo. Und die brauchst du in der .cpp, damit der Compiler weiß, was mit <code>void Foo::bar()</code> gemeint ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269252</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269252</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 09 Nov 2012 12:39:31 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso Header in cpp inkludieren? on Fri, 09 Nov 2012 12:12:52 GMT]]></title><description><![CDATA[<p>Belli:<br />
Also ich bin jetzt nicht beim Terminus sicher und bitte pumuckl den Fall auch zu klären, aber:</p>
<pre><code class="language-cpp">void foo::bar()
{
// ...
}
</code></pre>
<p>ist imo nicht zugleich Deklaration, funktioniert jedenfalls nicht. Denn für eine Deklaration einer Methode einer Klasse gehört doch auch, ob die Methode public/protected/private ist, was hier nicht angegeben ist.</p>
<p>Eine Variante, die Deklaration und Definition für eine Klasse vereint, ist jedoch:</p>
<pre><code class="language-cpp">class foo
{
public:
    void bar()
    {
        // ..
    }
};
</code></pre>
<p>Das sollte man natürlich nicht tun. Denn wenn die Klasse 10 Mal genutzt wird und man die Implementierung von bar() ändert, führt dies zu einer Neukompilierung aller ÜE, welche die Klasse nutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269253</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Fri, 09 Nov 2012 12:12:52 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso Header in cpp inkludieren? on Fri, 09 Nov 2012 12:25:10 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title="O_O"
      alt="😮"
    /> schrieb:</p>
<blockquote>
<p>Marlin schrieb:</p>
<blockquote>
<p>Also ist der eigentliche Grund, dass vor einer Definition IMMER eine Deklaration kommen muss?</p>
</blockquote>
<p>Richtig</p>
</blockquote>
<p>Falsch.</p>
<p>xStrykex schrieb:</p>
<blockquote>
<p>Definition auch gleich Deklaration</p>
</blockquote>
<p>Richtig.</p>
<p>Aber um eine Methode einer Klasse zu definieren, muss zunächst die <strong>Definition</strong> der Klasse bekannt sein. Die <strong>Deklaration</strong> einer Klasse ist etwas völlig anderes.</p>
<p>Faustregel: Wenn {} im Spiel sind, wird irgendwas definiert <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/2269265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269265</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 09 Nov 2012 12:25:10 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso Header in cpp inkludieren? on Fri, 09 Nov 2012 12:37:28 GMT]]></title><description><![CDATA[<p><strong>Stefan</strong> schrieb:</p>
<blockquote>
<p>In diesem Fall musst du den Header nicht im cpp inkludieren:</p>
<pre><code>// .h
int negate(int i);
</code></pre>
<pre><code>// .cpp

int negate(int i)
{
  return -i;
}
</code></pre>
<p>Die Implementierung im .cpp muss die Deklaration im .h nicht kennen. Wenn Du bei einer Klasse die Implementierung auslagern willst, sieht es natürlich anders aus.</p>
</blockquote>
<p>...wobei zumindest in C hier der Vorteil des Inkludierens des Headers wäre, dass der Compiler dann noch vergleichen kann, ob die Definition zur Deklaration passt. Also, bei</p>
<pre><code>// .h
int negate(int i);
</code></pre>
<pre><code>// .cpp

double negate(double x)
{
  return -x;
}
</code></pre>
<p>würde da in C ein fertiges Programm erstellt, was nicht funktioniert und sich komisch verhält. Mit dem Inkludieren des Headers würde dieser Fehler schon zur Compile-Zeit bemerkt.</p>
<p>In C++ sieht das etwas anders aus. Da würde man einen Fehler zur Linkzeit bekommen, ob man den Header nun inkludiert oder nicht, weil man ja in C++ Funktionen überladen kann und die verschiedenen Versionen in den Objektdateien auch unterschiedliche &quot;<a href="http://en.wikipedia.org/wiki/Name_mangling" rel="nofollow">gemangelte</a>&quot; Namen bekommen.</p>
<p>Ich habe es mir angewöhnt, den Header immer zu inkludieren, weil man ihn eh meistens benötigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269272</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269272</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 09 Nov 2012 12:37:28 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso Header in cpp inkludieren? on Fri, 09 Nov 2012 12:41:15 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>ist imo nicht zugleich Deklaration,</p>
</blockquote>
<p>Stimmt, danke, habs bei mir reineditiert...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269273</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269273</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 09 Nov 2012 12:41:15 GMT</pubDate></item></channel></rss>