<?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[Voneinander abhängige Klassen, Header]]></title><description><![CDATA[<p>Hallo,</p>
<p>Wenn man zwei Klassen hat die jeweils die andere Klasse benötigen, warum ist es dann falsch die Header so zu schreiben:</p>
<pre><code>//Datei A.h
#ifndef A_h
#define A_h
#include &quot;B.h&quot;
...usw.
#endif
</code></pre>
<pre><code>//Datei B.h
#ifndef B_h
#define B_h
#include &quot;A.h&quot;
...usw.
#endif
</code></pre>
<p>Wenn A.h zuerst gelesen wird, wird in der dritten Zeile B.h gelesen. In der dritten Zeile von B.h wird dann wiederum A.h gelesen, da A.h aber bereits definiert wurde, wird A.h wegen #ifndef ignoriert. Das Endergebnis ist also dann, dass sowohl A.h als auch B.h jeweils einmal eingebunden wurden. Wo ist also das Problem?</p>
<p>In meinem Lehrbuch steht, dass die Header falsch wären. Die Begründung dafür kann ich aber überhaupt nicht nachvollziehen, weshalb ich sie hier erst gar nicht angebe.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/313307/voneinander-abhängige-klassen-header</link><generator>RSS for Node</generator><lastBuildDate>Sun, 02 Aug 2026 07:50:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/313307.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 27 Jan 2013 13:25:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Voneinander abhängige Klassen, Header on Sun, 27 Jan 2013 14:00:13 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Wenn man zwei Klassen hat die jeweils die andere Klasse benötigen, warum ist es dann falsch die Header so zu schreiben:</p>
<pre><code>//Datei A.h
#ifndef A_h
#define A_h
#include &quot;B.h&quot;
...usw.
#endif
</code></pre>
<pre><code>//Datei B.h
#ifndef B_h
#define B_h
#include &quot;A.h&quot;
...usw.
#endif
</code></pre>
<p>Wenn A.h zuerst gelesen wird, wird in der dritten Zeile B.h gelesen. In der dritten Zeile von B.h wird dann wiederum A.h gelesen, da A.h aber bereits definiert wurde, wird A.h wegen #ifndef ignoriert. Das Endergebnis ist also dann, dass sowohl A.h als auch B.h jeweils einmal eingebunden wurden. Wo ist also das Problem?</p>
<p>In meinem Lehrbuch steht, dass die Header falsch wären. Die Begründung dafür kann ich aber überhaupt nicht nachvollziehen, weshalb ich sie hier erst gar nicht angebe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293855</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293855</guid><dc:creator><![CDATA[climits]]></dc:creator><pubDate>Sun, 27 Jan 2013 14:00:13 GMT</pubDate></item><item><title><![CDATA[Reply to Voneinander abhängige Klassen, Header on Sun, 27 Jan 2013 13:35:41 GMT]]></title><description><![CDATA[<p>Beispiel:</p>
<pre><code>// A.h
#pragma once // Include-Guard unter VS
#include &quot;B.h&quot;

class A
{
    B b;
};

// B.h
#pragma once
#include &quot;A.h&quot;

class B
{
    A b;
};
</code></pre>
<p>Include bewirkt ein Einbinden der entsprechenden Datei, nach dem Beenden des Präprozessors sieht das so aus:</p>
<pre><code>// A.h
#pragma once

#include &quot;A.h&quot;

class B
{
    A b;
};

class A
{
    B b;
};
</code></pre>
<p>Im eingebunden B wird wiederum A inkludiert, da dass allerdings nicht mehr geht (Include-Guard!), wird nichts inkludiert.<br />
B braucht allerdings die Definition von A vor der eigenen Definition. Die Folge ist, dass er A nicht mehr kennt und somit auch keinen Member davon haben kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293864</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sun, 27 Jan 2013 13:35:41 GMT</pubDate></item><item><title><![CDATA[Reply to Voneinander abhängige Klassen, Header on Sun, 27 Jan 2013 13:35:47 GMT]]></title><description><![CDATA[<p>Das ergibt eine zirkuläre Abhängigkeit und kann mittels Vorwärtsdeklaration gelöst werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293865</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Sun, 27 Jan 2013 13:35:47 GMT</pubDate></item><item><title><![CDATA[Reply to Voneinander abhängige Klassen, Header on Sun, 27 Jan 2013 13:37:12 GMT]]></title><description><![CDATA[<p>Wenn die Klasse B die Klasse A benötigt, dann muss die Klasse A vor B stehen und das funktioniert mit deinem Beispiel nicht. Deswegen brauchst du eine Vorwärtsdeklaration.</p>
<p>Und übrigens heißt es #define statt #def und #include &quot;A.h&quot; statt #include &quot;A_h&quot; (Gleiches gilt natürlich für B.h).</p>
<p>Nathans Beispiel kann auch nicht direkt mit Vorwärtsdeklaration gelöst werden, denn wenn jede Klasse ein Objekt der anderen Klasse direkt (ohne Pointer/Referenzen) enthält, wären die Objekte ja unendlich groß.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293866</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293866</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Sun, 27 Jan 2013 13:37:12 GMT</pubDate></item><item><title><![CDATA[Reply to Voneinander abhängige Klassen, Header on Sun, 27 Jan 2013 14:24:27 GMT]]></title><description><![CDATA[<p>Ok, hab's denke ich verstanden. Danke für die Antworten. Solche zirkulären Beziehungen waren für mich schon immer schwer nachzuvollziehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293884</guid><dc:creator><![CDATA[climits]]></dc:creator><pubDate>Sun, 27 Jan 2013 14:24:27 GMT</pubDate></item></channel></rss>