<?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[Wann Quellcode einer Funktion in die Header-Datei (und warum)]]></title><description><![CDATA[<p>Hallo,<br />
warum muss in bestimmten Situation der Quellcode einer Klassenfunktion in die Header Datei geschrieben werden? Beispiel,</p>
<p>Foo.h(pp):</p>
<pre><code class="language-cpp">class Foo
{
public:
  FooB* TueEtwas(char* msg);
  Foo();
  ~Foo();
};
</code></pre>
<p>Foo.cpp:</p>
<pre><code class="language-cpp">#include &quot;Foo.h(pp)&quot;

FooB* Foo::TueEtwas(char* msg)
{
  ...
  return new FooB();
}
Foo::Foo(){}
Foo::~Foo(){}
</code></pre>
<p>In bestimmten fällen, liefert mir der Compiler beim Linken &quot;Undefined Reference to Foo::TueEtwas in BlaBla&quot;.</p>
<p>Wenn ich den selben Quellcode aber direkt in die Header-Datei der jeweiligen Funktion schreibe funktioniert es. Gibt es eine Richtlinie wann ich das in den Header schreiben muss und wann nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/204116/wann-quellcode-einer-funktion-in-die-header-datei-und-warum</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 18:51:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/204116.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 30 Jan 2008 13:07:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wann Quellcode einer Funktion in die Header-Datei (und warum) on Wed, 30 Jan 2008 13:07:28 GMT]]></title><description><![CDATA[<p>Hallo,<br />
warum muss in bestimmten Situation der Quellcode einer Klassenfunktion in die Header Datei geschrieben werden? Beispiel,</p>
<p>Foo.h(pp):</p>
<pre><code class="language-cpp">class Foo
{
public:
  FooB* TueEtwas(char* msg);
  Foo();
  ~Foo();
};
</code></pre>
<p>Foo.cpp:</p>
<pre><code class="language-cpp">#include &quot;Foo.h(pp)&quot;

FooB* Foo::TueEtwas(char* msg)
{
  ...
  return new FooB();
}
Foo::Foo(){}
Foo::~Foo(){}
</code></pre>
<p>In bestimmten fällen, liefert mir der Compiler beim Linken &quot;Undefined Reference to Foo::TueEtwas in BlaBla&quot;.</p>
<p>Wenn ich den selben Quellcode aber direkt in die Header-Datei der jeweiligen Funktion schreibe funktioniert es. Gibt es eine Richtlinie wann ich das in den Header schreiben muss und wann nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446278</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446278</guid><dc:creator><![CDATA[kleines_eichhoernchen]]></dc:creator><pubDate>Wed, 30 Jan 2008 13:07:28 GMT</pubDate></item><item><title><![CDATA[Reply to Wann Quellcode einer Funktion in die Header-Datei (und warum) on Wed, 30 Jan 2008 13:10:49 GMT]]></title><description><![CDATA[<p>Bei Templates (ausser der Kompiler unterstützt export).<br />
Ansonsten nicht und sollte meines erachtens immer getrennt in *.h und *.cpp werden. (Der Kompiler macht das inlining sowiso besser als der Programmierer.)</p>
<p>Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446280</guid><dc:creator><![CDATA[simon.gysi]]></dc:creator><pubDate>Wed, 30 Jan 2008 13:10:49 GMT</pubDate></item><item><title><![CDATA[Reply to Wann Quellcode einer Funktion in die Header-Datei (und warum) on Wed, 30 Jan 2008 13:18:20 GMT]]></title><description><![CDATA[<p>Das mit den Templates ist mir mittlerweile bekannt.</p>
<p>Die Klasse wo das Problem auftrat ist allerdings keine Template-Klasse. Die Basisklasse von FooB ist allerdings eine Basisklasse gewesen. Hängt das damit zusammen?</p>
<p>Und warum können in Templates die Funktionsrümpfe nicht getrennt von den Quellcodedateien abgelegt werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446294</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446294</guid><dc:creator><![CDATA[kleines_eichhoernchen]]></dc:creator><pubDate>Wed, 30 Jan 2008 13:18:20 GMT</pubDate></item><item><title><![CDATA[Reply to Wann Quellcode einer Funktion in die Header-Datei (und warum) on Wed, 30 Jan 2008 13:21:54 GMT]]></title><description><![CDATA[<p>Kann schon, dann musst du aber die Ausprägungen mit angeben und kannst auch keine anderen als die Angegeben verwenden. Der Grund: Beim separaten Kompilieren kann der Compiler ja nicht wissen welche Ausprägungen benötigt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446297</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446297</guid><dc:creator><![CDATA[Tyrdal]]></dc:creator><pubDate>Wed, 30 Jan 2008 13:21:54 GMT</pubDate></item><item><title><![CDATA[Reply to Wann Quellcode einer Funktion in die Header-Datei (und warum) on Wed, 30 Jan 2008 13:23:17 GMT]]></title><description><![CDATA[<p>kleines_eichhoernchen schrieb:</p>
<blockquote>
<p>Das mit den Templates ist mir mittlerweile bekannt.</p>
<p>Die Klasse wo das Problem auftrat ist allerdings keine Template-Klasse.</p>
</blockquote>
<p>Dann hängt es höchstwahrscheinlich damit zusammen, dass die Quellcodedatei, die die fehlende Funktion beinhaltet nicht mit der, die main beinhaltet zusammen gelinkt wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446299</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446299</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 30 Jan 2008 13:23:17 GMT</pubDate></item><item><title><![CDATA[Reply to Wann Quellcode einer Funktion in die Header-Datei (und warum) on Wed, 30 Jan 2008 13:26:43 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Dann hängt es höchstwahrscheinlich damit zusammen, dass die Quellcodedatei, die die fehlende Funktion beinhaltet nicht mit der, die main beinhaltet zusammen gelinkt wurde.</p>
</blockquote>
<p>Doch doch, die ist dabei.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/16174">@Tyrdal</a><br />
für unwissende, was sind Ausprägungen? Die einzelnen Template-Argumente bei den Templates selbst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446305</guid><dc:creator><![CDATA[kleines_eichhoernchen]]></dc:creator><pubDate>Wed, 30 Jan 2008 13:26:43 GMT</pubDate></item><item><title><![CDATA[Reply to Wann Quellcode einer Funktion in die Header-Datei (und warum) on Wed, 30 Jan 2008 13:28:52 GMT]]></title><description><![CDATA[<p>Der Compiler dröselt die Templates auf zu konkreten Klassen/Methoden, je nachdem mit welchen Typen du sie verwendest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446308</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446308</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Wed, 30 Jan 2008 13:28:52 GMT</pubDate></item><item><title><![CDATA[Reply to Wann Quellcode einer Funktion in die Header-Datei (und warum) on Wed, 30 Jan 2008 13:36:15 GMT]]></title><description><![CDATA[<p>Aso OK,<br />
(das ist ja blöd vom Compiler, dass das nicht zur Laufzeit geschieht). Na gut das zur Laufzeit wär auch nicht so berauschend. Aber gut. Danke, jetzt weiß ich bescheid.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446315</guid><dc:creator><![CDATA[kleines_eichhoernchen]]></dc:creator><pubDate>Wed, 30 Jan 2008 13:36:15 GMT</pubDate></item><item><title><![CDATA[Reply to Wann Quellcode einer Funktion in die Header-Datei (und warum) on Wed, 30 Jan 2008 13:43:46 GMT]]></title><description><![CDATA[<p>kleines_eichhoernchen schrieb:</p>
<blockquote>
<p>In bestimmten fällen, liefert mir der Compiler beim Linken &quot;Undefined Reference to Foo::TueEtwas in BlaBla&quot;.</p>
</blockquote>
<p>ja, (wie gesagt), immer dann, wenn foo.cpp (bzw. die fertig-kompilierte übersetzungseinheit) nicht mit dem rest deines programms verlinkt wird. ersetze mal &quot;BlaBla&quot; durch das, was der linker dir tatsächlich sagt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446327</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446327</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Wed, 30 Jan 2008 13:43:46 GMT</pubDate></item><item><title><![CDATA[Reply to Wann Quellcode einer Funktion in die Header-Datei (und warum) on Wed, 30 Jan 2008 13:56:42 GMT]]></title><description><![CDATA[<p>kleines_eichhoernchen schrieb:</p>
<blockquote>
<p>...(das ist ja blöd vom Compiler, dass das nicht zur Laufzeit geschieht)...</p>
</blockquote>
<p>Das was du als Nachteil ansiehst ist aber ebenso ein gewaltiger Vorteil.<br />
Ich bezweifel das sonst die Templatemetaprogrammierung funktionieren würde, und mir persönlich wichtiger: Ich möchte das der Compiler möglichst viele Fehler findet, und diese nicht erst zur Laufzeit auftreten.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446335</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 30 Jan 2008 13:56:42 GMT</pubDate></item><item><title><![CDATA[Reply to Wann Quellcode einer Funktion in die Header-Datei (und warum) on Thu, 07 Feb 2008 17:37:10 GMT]]></title><description><![CDATA[<p>So hatte das selbe Problem nochmal.<br />
<strong>foo.hpp:</strong></p>
<pre><code class="language-cpp">class Foo
{
public:
  void SomeFunc();
  ...
  void SomeFunc2(struct soap *soap, ...);

  Foo();
  ~Foo();
};
</code></pre>
<p><strong>foo.cpp</strong></p>
<pre><code class="language-cpp">#include &quot;foo.hpp&quot;

void Foo::SomeFunc() {...}

void Foo::SomeFunc2(struct soap *soap, ...) {...}

Foo::Foo() {...}

Foo::~Foo() {...}
</code></pre>
<p><strong>bar.cpp</strong></p>
<pre><code class="language-cpp">#include &quot;bar.hpp&quot;;
#include &quot;foo.hpp&quot;;

void SomeFunc3()
{
  Foo foo;

  struct soap soap;  

  foo.SomeFunc2(&amp;soap, ...);
}
</code></pre>
<p>Die beiden cpp-Dateien ließen sich wunderbar kompilieren. Beim Linken trat allerdings</p>
<p>*undefined reference to Function &quot;Foo::SomeFunc2(struct soap <em>soap, ...)&quot; in File bar.o (bar.cpp)</em></p>
<p>Nach längerem probieren bin ich dann dadrauf gekommen, dass der Compiler/Linker das struct soap nicht kennt, bzw. kennen kann, da auf die Header-Datei nicht verwiesen wurde/konnte. Mit der Änderung</p>
<p><strong>foo.hpp:</strong></p>
<pre><code class="language-cpp">struct soap;

class Foo
{
   ...
};
</code></pre>
<p>hat es dann funktioniert. Allerdings ist die Compilermeldung/Linkermeldung sehr irreführend. Mit der Implementierung der Funktion Somefunc2() in der Header-Datei selbst funktioniert es auch ohne Forward-Deklaration!????</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1451414</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1451414</guid><dc:creator><![CDATA[kleines_eichhoernchen]]></dc:creator><pubDate>Thu, 07 Feb 2008 17:37:10 GMT</pubDate></item></channel></rss>