<?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[Warum ist C++ so doof und lässt mich Header nicht gegenseitig inkludieren&amp;amp;nutzen?]]></title><description><![CDATA[<p>[C++-bashing gelöscht]</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/248237/warum-ist-c-so-doof-und-lässt-mich-header-nicht-gegenseitig-inkludieren-amp-nutzen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 05:17:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/248237.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 22 Aug 2009 01:59:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Warum ist C++ so doof und lässt mich Header nicht gegenseitig inkludieren&amp;amp;nutzen? on Sat, 22 Aug 2009 07:13:51 GMT]]></title><description><![CDATA[<p>[C++-bashing gelöscht]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764630</guid><dc:creator><![CDATA[Doof0r]]></dc:creator><pubDate>Sat, 22 Aug 2009 07:13:51 GMT</pubDate></item><item><title><![CDATA[Reply to Warum ist C++ so doof und lässt mich Header nicht gegenseitig inkludieren&amp;amp;nutzen? on Sat, 22 Aug 2009 02:25:45 GMT]]></title><description><![CDATA[<p>Es scheint dir nicht bewusst zu sein, aber #include ist dafür da, die angegebene Datei genau an der jeweiligen Stelle einzufügen.<br />
Das Problem sollte offensichtlich sein, wenn zwei Dateien versuchen, sich gegenseitig einzubinden. #pragma once verhindert, dass dieselbe Datei mehr als einmal in der Übersetzungseinheit eingebunden wird.</p>
<p>Die Lösung ist aber einfach und nennt sich forward declaration.<br />
Statt den Class1-Header in Class2.h einzubinden, schreibst du class Class1; und die Existenz der Klasse ist ab sofort bekannt. Die Verwendung von Referenzen und Zeigern erfordert es auch nicht, dass die vollständige Deklaration von Class1 bekannt ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764634</guid><dc:creator><![CDATA[Nanyuki]]></dc:creator><pubDate>Sat, 22 Aug 2009 02:25:45 GMT</pubDate></item><item><title><![CDATA[Reply to Warum ist C++ so doof und lässt mich Header nicht gegenseitig inkludieren&amp;amp;nutzen? on Sat, 22 Aug 2009 05:00:29 GMT]]></title><description><![CDATA[<p>Es ist völlig korrekt das der Compiler dir nicht die Möglichkeit gibt. Es ist auch kein Fehler, sondern <em>physikalisch</em> unmöglich! Denn bei deinem Fall muß zu jedem Zeitpunkt die komplette Typ-Definition des jeweils anderen <em>Value-Objekt</em> vorhanden sein. Das geht aber real garnicht.</p>
<p>Du hast deshalb folgende Möglichkeit:<br />
Benutze in einer der Klassen Referenzen oder Pointer, denn die verlangen keine Definition. Dann kannst du eine Forward-Deklaration benutzen. Bsp:</p>
<pre><code class="language-cpp">#pragma once

class Class2; // Forward declaration

class Class1
{
    Class2 &amp;class2; // hier eine Referenz. Alternativ auch Pointer oder besser Smartpointer möglich
};

// In der Class1.cpp-Datei kannst/mußt du jetzt Class2.h inkludieren!!!
</code></pre>
<p>Angeblich soll man auch Forward Declarations bei Value-Objekten nutzen können. Habe ich aber bisher nicht ausprobiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764637</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Sat, 22 Aug 2009 05:00:29 GMT</pubDate></item><item><title><![CDATA[Reply to Warum ist C++ so doof und lässt mich Header nicht gegenseitig inkludieren&amp;amp;nutzen? on Sat, 22 Aug 2009 07:13:34 GMT]]></title><description><![CDATA[<p>[C++-bashing gelöscht]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764638</guid><dc:creator><![CDATA[zustimmer]]></dc:creator><pubDate>Sat, 22 Aug 2009 07:13:34 GMT</pubDate></item><item><title><![CDATA[Reply to Warum ist C++ so doof und lässt mich Header nicht gegenseitig inkludieren&amp;amp;nutzen? on Sat, 22 Aug 2009 07:14:35 GMT]]></title><description><![CDATA[<p>zustimmer schrieb:</p>
<blockquote>
<p>[C++-bashing gelöscht]</p>
</blockquote>
<p>Der OP hat eine Aussage auf Grund von Unwissenheit getätigt. Deine Wiederholung dieser Aussage wird dadurch nicht richtig.</p>
<p>Zum Thema: Die anderen Sprachen haben das Thema nicht, weil sie keine Value-Objekte zulassen! Die sogenannten &quot;modernen&quot; Sprachen wie Java, C# usw. kennen nur Referenzen! Und deren &quot;Import&quot;-Anweisung ist vergleichbar mit einem Forward-Declaration. Wenn diese Sprachen auch Value-Objekte kennen <em>würden</em>, hätten sie die selben Schwierigkeiten! So wird ein Schuh draus.</p>
<p>Wenn man das gleiche Verhalten/Einfachheit haben will, sollte man in C++ auf Smart-Pointer setzen und somit die Objekte auf dem Freestore anlegen, so wie es die &quot;modernen&quot; Sprachen durchgängig vom Anwender <em>erzwingen</em>. C++ verlangt das nicht, erlaubt halt mehrere Designs. Und es gibt ja <code>shared_ptr&lt;T&gt;</code> im C++-Standard, um einfach mit Freestore-Objekten zu arbeiten, wenn man kein Value-Objekt will.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764641</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764641</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Sat, 22 Aug 2009 07:14:35 GMT</pubDate></item></channel></rss>