<?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 Bekanntmachungen und Headern]]></title><description><![CDATA[<p>Ich bastel gerade etwas herum und bin dabei auf etwas gestoßen das ich mir leider nicht genau erklären kann.</p>
<p>Ich habe folgendes Problem, ich habe 2 Klassen, Klasse A und Klasse B, beide haben einen eigenen Header und eine eigene CPP Datei. In beiden CPP Dateien sind jeweils beide header includiert.</p>
<p>Was mir jetzt Kopfzerbrechen bereitet ist folgende begebenheit, beide Klassen haben als Membervariable einen Zeiger auf die jeweils andere Klasse, diese wird ja schon im Header includiert, nun habe ich aber folgendes, wenn ich die jeweils andere Klasse im header bekanntmache arbeitet der compiler anstandslos alles ab und es funktioniert, wenn ich jedoch im header die ehader datei der anderen klasse include, was ja eine deffinition ist die die klasse eigentlich auch bekanntmachen müsste, meckert der compiler sowohl im header als auch in der cpp das er die andere Klasse nicht kennt und somit alle Funktionsaufrufe an die andere Klasse nicht will, obwohl die Header included sind, includen des headers alleine ohne bekanntmachung im header funktioniert erst dann wenn die Klasse eine Variable der anderen Klasse besitzt. Meine Frage dazu ist warum ist das so, sollte das includen des headers nicht die Klasse komplett Bekanntmachen mit allen Funktionen? Handelt es sich dabei um eine Optimierung weil die bekanntmachung schnelelr ist als das Includen und der Compiler hier erzwingen will das man nur included wenn es sein muß und ansonsten mit bekanntmachungen ind en ehadern arbeitet?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/219472/frage-zu-bekanntmachungen-und-headern</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 07:10:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/219472.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 03 Aug 2008 20:39:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu Bekanntmachungen und Headern on Sun, 03 Aug 2008 20:43:04 GMT]]></title><description><![CDATA[<p>Ich bastel gerade etwas herum und bin dabei auf etwas gestoßen das ich mir leider nicht genau erklären kann.</p>
<p>Ich habe folgendes Problem, ich habe 2 Klassen, Klasse A und Klasse B, beide haben einen eigenen Header und eine eigene CPP Datei. In beiden CPP Dateien sind jeweils beide header includiert.</p>
<p>Was mir jetzt Kopfzerbrechen bereitet ist folgende begebenheit, beide Klassen haben als Membervariable einen Zeiger auf die jeweils andere Klasse, diese wird ja schon im Header includiert, nun habe ich aber folgendes, wenn ich die jeweils andere Klasse im header bekanntmache arbeitet der compiler anstandslos alles ab und es funktioniert, wenn ich jedoch im header die ehader datei der anderen klasse include, was ja eine deffinition ist die die klasse eigentlich auch bekanntmachen müsste, meckert der compiler sowohl im header als auch in der cpp das er die andere Klasse nicht kennt und somit alle Funktionsaufrufe an die andere Klasse nicht will, obwohl die Header included sind, includen des headers alleine ohne bekanntmachung im header funktioniert erst dann wenn die Klasse eine Variable der anderen Klasse besitzt. Meine Frage dazu ist warum ist das so, sollte das includen des headers nicht die Klasse komplett Bekanntmachen mit allen Funktionen? Handelt es sich dabei um eine Optimierung weil die bekanntmachung schnelelr ist als das Includen und der Compiler hier erzwingen will das man nur included wenn es sein muß und ansonsten mit bekanntmachungen ind en ehadern arbeitet?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1558670</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1558670</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Sun, 03 Aug 2008 20:43:04 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Bekanntmachungen und Headern on Sun, 03 Aug 2008 20:47:58 GMT]]></title><description><![CDATA[<p>Junge da blickt ja kein Mensch durch stell hier doch einfach ein Minimalbeispiel rein, dann sieht jeder sofort was du meinst. Ich hab zwar schon ne Vermutung nachdem ich die erste Hälfte gelesen habe, aber wenn ich dein Minimalbeispiel sehe kann ich sofort sagen warum es nicht geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1558673</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1558673</guid><dc:creator><![CDATA[Junge Junge]]></dc:creator><pubDate>Sun, 03 Aug 2008 20:47:58 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Bekanntmachungen und Headern on Sun, 03 Aug 2008 21:00:13 GMT]]></title><description><![CDATA[<p>Ok minimalbeispiel. Klasse A hat einen Zeiger vom Typ Klasse B.</p>
<pre><code class="language-cpp">//header A
class B;

class A
{
    B *pb;
};
</code></pre>
<pre><code class="language-cpp">//header A
#include &quot;b.h&quot;

class A
{
    B *pb;
};
</code></pre>
<p>Meine Frage ist jetzt wieso funktioniert Beispiel 1 und Beispiel 2 nicht, wende ich Beispiel 2 an wird gemeckert das er den Typ von B nicht kennt. Wende ich Beispiel 1 an funktioniert es Tadellos, Beispiel 2 funktioniert nur dann wenn die Klasse zusätzlich eine Membervariable vom Typ B besitzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1558680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1558680</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Sun, 03 Aug 2008 21:00:13 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Bekanntmachungen und Headern on Sun, 03 Aug 2008 21:10:00 GMT]]></title><description><![CDATA[<p>Inkludierst du in &quot;B.h&quot; zufällig &quot;A.h&quot;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1558683</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1558683</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sun, 03 Aug 2008 21:10:00 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Bekanntmachungen und Headern on Sun, 03 Aug 2008 21:14:16 GMT]]></title><description><![CDATA[<p>Das nimmt der Compiler ja nicht an, ich habe in beiden Headern, einen zeiger auf die andere klasse dh in b einen A *pa; und in B einen B *pb; wenn ich im header die jeweils andere Klasse bekannt mache also in b.h class A; schreibe und in a.h class B; schreibe geht alels super includiere ich abebr stattdessen in a den b header und umgedreht funktioniert das nicht, wenn ich aber zusätzlich zum pointer noch eine variable der anderen Klasse habe geht das via include plötzlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1558684</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1558684</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Sun, 03 Aug 2008 21:14:16 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Bekanntmachungen und Headern on Sun, 03 Aug 2008 21:18:35 GMT]]></title><description><![CDATA[<p>Also dein Minimalbeispiel wie du es dargestellt hast funktioniert, insofern du in b.h kein &quot;#include &quot;a.h&quot;&quot; stehen hast.<br />
Du kannst in b.h, a.h inkludieren oder in a.h b.h inkludieren, aber nicht in jedem header den jeweils anderen.</p>
<p>Wenn du sowieso nur einen Zeiger auf A bzw. B hast reicht im Header normalerweise auch eine Forwärtsdeklaration, so lange du keine Inline-Funktionen hast die auf diese Attribute zugreifen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1558686</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1558686</guid><dc:creator><![CDATA[Junge Junge]]></dc:creator><pubDate>Sun, 03 Aug 2008 21:18:35 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Bekanntmachungen und Headern on Sun, 03 Aug 2008 21:36:33 GMT]]></title><description><![CDATA[<p>Also um das mal zu sagen, VC verhält sich bei einem solchen Zustand nicht immer gleich.<br />
file1.h</p>
<pre><code class="language-cpp">#pragma once

#include &quot;file2.h&quot;

class a
{
};
</code></pre>
<p>file2.h</p>
<pre><code class="language-cpp">#pragma once

#include &quot;file1.h&quot;

class b
{
	a _a;
};
</code></pre>
<p>Funktioniert bei mir, wenn ich a _a; zuerst mal auskommentiere, compile und dann wieder reinmache. Beim ersten mal funktionierts nicht.<br />
Da bekomme ich diesen (und folge-)Fehler:</p>
<blockquote>
<p>error C2146: syntax error : missing ';' before identifier '_a'</p>
</blockquote>
<p>Daher würde ich dir immer raten forward decleration und Pointer zu benutzen. Das geht eigl. immer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1558697</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1558697</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 03 Aug 2008 21:36:33 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Bekanntmachungen und Headern on Sun, 03 Aug 2008 21:48:28 GMT]]></title><description><![CDATA[<p>Ok danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1558703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1558703</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Sun, 03 Aug 2008 21:48:28 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Bekanntmachungen und Headern on Sun, 03 Aug 2008 22:16:42 GMT]]></title><description><![CDATA[<p>Übrigens ist es auch ganz sinnvoll so wenig wie möglich zu inkludieren da diese ganzen inlcudes den Kompiliervorgang extrem verlangsamen, das merkt man schon bei recht kleinen Projekten.<br />
Wenn dein Compiler eine Option hat, wie #pragma once, dann benutze sie. Gerade unterm MSVC bringt das enorme Geschwindigkeitsgewinne.<br />
Sei allerdings so nett und benutze weiterhin include-guards und packe ein #ifdef um das Pragma, falls du mal den Compiler wechseln willst.<br />
Wobei das oftmals auch recht schwer ist, da man sehr leicht den Fehler macht die Richtigkeit an dem Fehlerhalten seines Compilers festzumachen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1558723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1558723</guid><dc:creator><![CDATA[Junge Junge]]></dc:creator><pubDate>Sun, 03 Aug 2008 22:16:42 GMT</pubDate></item></channel></rss>