<?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[Probleme mit den Header-Dateien bei bidirektionalen Objektreferenzen...]]></title><description><![CDATA[<p>Kurzform der Frage: Wie kriegt man es hin, dass sich 2 Klassen gegenseitig kennen?? Ich hab hier Probleme mit den include-Dateien.</p>
<p>Hallo,</p>
<p>ich habe noch nicht sehr viel Erfahrung mit C++ (aber mit OO-Programmierung) und hab daher eine Frage zu folgendem Problem:</p>
<p>Ich habe eine Klasse A (Dateien A.h und A.cpp) und eine Klasse B (Dateien B.h und B.cpp). Die Klasse A soll eine Membervariable vom Typ der Klasse B haben und die Klasse B soll wiederum eine Membervariable vom Typ der Klasse A haben - somit haben wir eine bidirektionale Hat-Beziehung.</p>
<p>Bei der Implementierung dessen, ist es ja nun erforderlich, dass die Datei A.h die Datei B.h inkludiert (damit sie den Typ B kennt). Gleichsam ist es auch erforderlich, dass die Datei B.h die A.h inkludiert, damit sie den Typ A kennt. Die *.cpp-Dateien inkludieren dann nur noch die für sie relevante *.h-Datei.</p>
<p>Hier spielt irgendwie mein Linker verrückt - offensichtlich handelt es sich um ein Problem der Sorte &quot;die katze beißt sich in den Schwanz&quot;...Ich hab dann mal versucht, die *.h-Dateien mit den folgenden Prä-Prozessor-Direktiven zu versehen:</p>
<p>#ifndef _A_ //...für Klasse A<br />
#define _A_<br />
......//includes und Klassendeklaration</p>
<p>#endif</p>
<p>Der effekt war, dass nun beim Compilieren, die Typen nicht mehr erkannt wurden, weil offensichtlich, die *h-Dateien nur 1mal im Projekt inkludiert wurden (Tatsächlich gibt es ja aber im Projekt 2 #include &quot;A.h&quot; - Anweisungen, nämlich einmal in A.cpp und einmal in B.h).</p>
<p>Kurzum:<br />
******<br />
Wie kann ich dieses Problem lösen?? Wie sind solche bidirektionalen Objektreferenzen in C++ realisierbar???</p>
<p>Danke für jeden Hinweis.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/126673/probleme-mit-den-header-dateien-bei-bidirektionalen-objektreferenzen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 19:58:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/126673.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 17 Nov 2005 11:39:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit den Header-Dateien bei bidirektionalen Objektreferenzen... on Thu, 17 Nov 2005 11:39:41 GMT]]></title><description><![CDATA[<p>Kurzform der Frage: Wie kriegt man es hin, dass sich 2 Klassen gegenseitig kennen?? Ich hab hier Probleme mit den include-Dateien.</p>
<p>Hallo,</p>
<p>ich habe noch nicht sehr viel Erfahrung mit C++ (aber mit OO-Programmierung) und hab daher eine Frage zu folgendem Problem:</p>
<p>Ich habe eine Klasse A (Dateien A.h und A.cpp) und eine Klasse B (Dateien B.h und B.cpp). Die Klasse A soll eine Membervariable vom Typ der Klasse B haben und die Klasse B soll wiederum eine Membervariable vom Typ der Klasse A haben - somit haben wir eine bidirektionale Hat-Beziehung.</p>
<p>Bei der Implementierung dessen, ist es ja nun erforderlich, dass die Datei A.h die Datei B.h inkludiert (damit sie den Typ B kennt). Gleichsam ist es auch erforderlich, dass die Datei B.h die A.h inkludiert, damit sie den Typ A kennt. Die *.cpp-Dateien inkludieren dann nur noch die für sie relevante *.h-Datei.</p>
<p>Hier spielt irgendwie mein Linker verrückt - offensichtlich handelt es sich um ein Problem der Sorte &quot;die katze beißt sich in den Schwanz&quot;...Ich hab dann mal versucht, die *.h-Dateien mit den folgenden Prä-Prozessor-Direktiven zu versehen:</p>
<p>#ifndef _A_ //...für Klasse A<br />
#define _A_<br />
......//includes und Klassendeklaration</p>
<p>#endif</p>
<p>Der effekt war, dass nun beim Compilieren, die Typen nicht mehr erkannt wurden, weil offensichtlich, die *h-Dateien nur 1mal im Projekt inkludiert wurden (Tatsächlich gibt es ja aber im Projekt 2 #include &quot;A.h&quot; - Anweisungen, nämlich einmal in A.cpp und einmal in B.h).</p>
<p>Kurzum:<br />
******<br />
Wie kann ich dieses Problem lösen?? Wie sind solche bidirektionalen Objektreferenzen in C++ realisierbar???</p>
<p>Danke für jeden Hinweis.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/919942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/919942</guid><dc:creator><![CDATA[maxpower24]]></dc:creator><pubDate>Thu, 17 Nov 2005 11:39:41 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit den Header-Dateien bei bidirektionalen Objektreferenzen... on Thu, 17 Nov 2005 11:47:56 GMT]]></title><description><![CDATA[<p>Direkt als Member kannst du das nicht wechselseitig einbinden - sonst erhältst du unendlich große Objekte. Aber du kannst gegenseitig Referenzen oder Pointer einbauen - dazu benötigst du Forward-Deklarationen:</p>
<pre><code class="language-cpp">//A.h
#ifndef A_H
#define A_H
class B;

class A
{
  B* my_B;
};

#include &quot;B.h&quot;
#endif
//B.h
#ifndef B_H
#define B_H
#include &quot;A.h

class B
{
  A* my_A;
};
#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/919951</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/919951</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 17 Nov 2005 11:47:56 GMT</pubDate></item></channel></rss>