<?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[Vorwärtsdeklaration]]></title><description><![CDATA[<p>Abend,</p>
<p>ich habe folgende Code Struktur:</p>
<pre><code class="language-cpp">// Terrain.h
#include &quot;Quadtree.h&quot;

namespace A {

namespace B {

   class Terrain {
   private:
       QuadTree* quadtree;

       class SharedData {

       };
       SharedData* sharedData;
       friend class QuadTree;

   };
}

}
</code></pre>
<p>Und:</p>
<pre><code class="language-cpp">// Quadtree.h

namespace A {

namespace B {

   class Terrain::SharedData;  // Forward deklaraction

   class QuadTree {
   public:
      QuadTree(Terrain::SharedData* sharedData);

   };
}

}
</code></pre>
<p>Kurz zusammengefasst: Terrain hat einen Zeiger auf QuadTree und eine innere Klasse SharedData. Damit die Klasse QuadTree auf die Klasse Terrain::SharedData zugreifen kann, ist QuadTree friend von Terrain.<br />
In Quadtree.h inkludiere ich jetzt NICHT Terrain.h, denn sonst gäbs ja eine endlose Headerrekursion. Da ich aber im QuadTree Ctor einen Zeiger auf Terrain::SharedData übergebe, mache ich eine Forward Declartion auf Terrain::SharedData.<br />
Wenn ich jetzt Terrain.cpp kompiliere, kriege ich aber diesen Fehler in Quadtree.h (in der Zeile des Qudtree Ctor):</p>
<blockquote>
<p>Error 2 error C2653: 'Terrain' : is not a class or namespace name quadtree.h</p>
</blockquote>
<p>Ich verstehe nicht ganz wieso das nicht geht. Kann mir das wer sagen und wie ich den Fehler wegkriege?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/245657/vorwärtsdeklaration</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 13:56:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/245657.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 16 Jul 2009 21:27:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vorwärtsdeklaration on Thu, 16 Jul 2009 21:27:02 GMT]]></title><description><![CDATA[<p>Abend,</p>
<p>ich habe folgende Code Struktur:</p>
<pre><code class="language-cpp">// Terrain.h
#include &quot;Quadtree.h&quot;

namespace A {

namespace B {

   class Terrain {
   private:
       QuadTree* quadtree;

       class SharedData {

       };
       SharedData* sharedData;
       friend class QuadTree;

   };
}

}
</code></pre>
<p>Und:</p>
<pre><code class="language-cpp">// Quadtree.h

namespace A {

namespace B {

   class Terrain::SharedData;  // Forward deklaraction

   class QuadTree {
   public:
      QuadTree(Terrain::SharedData* sharedData);

   };
}

}
</code></pre>
<p>Kurz zusammengefasst: Terrain hat einen Zeiger auf QuadTree und eine innere Klasse SharedData. Damit die Klasse QuadTree auf die Klasse Terrain::SharedData zugreifen kann, ist QuadTree friend von Terrain.<br />
In Quadtree.h inkludiere ich jetzt NICHT Terrain.h, denn sonst gäbs ja eine endlose Headerrekursion. Da ich aber im QuadTree Ctor einen Zeiger auf Terrain::SharedData übergebe, mache ich eine Forward Declartion auf Terrain::SharedData.<br />
Wenn ich jetzt Terrain.cpp kompiliere, kriege ich aber diesen Fehler in Quadtree.h (in der Zeile des Qudtree Ctor):</p>
<blockquote>
<p>Error 2 error C2653: 'Terrain' : is not a class or namespace name quadtree.h</p>
</blockquote>
<p>Ich verstehe nicht ganz wieso das nicht geht. Kann mir das wer sagen und wie ich den Fehler wegkriege?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744526</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744526</guid><dc:creator><![CDATA[München]]></dc:creator><pubDate>Thu, 16 Jul 2009 21:27:02 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Thu, 16 Jul 2009 22:41:04 GMT]]></title><description><![CDATA[<p>Nun ja... warum es nicht geht, sagt schon die Fehlermeldung: Terrain ist in Quadtree.h unbekannt.</p>
<p>Den Fehler beseitigen kannst du, indem du genau anders herum forward deklarierst:<br />
#include von Terrain.h in Quadtree.h und forward von Quadtree in Terrain.h.</p>
<p>Allerdings scheint mir das Design sehr zweifelhaft. Eine Klasse, die mit einem Pointer auf eine private Klasse einer anderen Klasse erzeugt werden muss, stinkt. Sehr! Ich würde an deiner Stelle lieber dieses Design gerade ziehen.</p>
<p>Stefan.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744563</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744563</guid><dc:creator><![CDATA[DStefan]]></dc:creator><pubDate>Thu, 16 Jul 2009 22:41:04 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Fri, 17 Jul 2009 08:14:26 GMT]]></title><description><![CDATA[<p>DStefan schrieb:</p>
<blockquote>
<p>Nun ja... warum es nicht geht, sagt schon die Fehlermeldung: Terrain ist in Quadtree.h unbekannt.</p>
</blockquote>
<p>Das versteh ich nicht. Natürlich ist Terrain nicht bekannt, deshalb benutz ich ja die Forward Declaration. Das ist doch der Sinn einer Forward Declaration? Ich sage dem Compiler: Jetzt kommt gleich ein Typ, für den kennst du noch keine Deklaration, aber das passt schon.<br />
Ist meine Syntax falsch? Oder ist das Problem, dass SharedData eine innere Klasse ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744638</guid><dc:creator><![CDATA[München]]></dc:creator><pubDate>Fri, 17 Jul 2009 08:14:26 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Fri, 17 Jul 2009 08:44:52 GMT]]></title><description><![CDATA[<p>München schrieb:</p>
<blockquote>
<p>DStefan schrieb:</p>
<blockquote>
<p>Nun ja... warum es nicht geht, sagt schon die Fehlermeldung: Terrain ist in Quadtree.h unbekannt.</p>
</blockquote>
<p>Das versteh ich nicht. Natürlich ist Terrain nicht bekannt, deshalb benutz ich ja die Forward Declaration. Das ist doch der Sinn einer Forward Declaration? Ich sage dem Compiler: Jetzt kommt gleich ein Typ, für den kennst du noch keine Deklaration, aber das passt schon.<br />
Ist meine Syntax falsch? Oder ist das Problem, dass SharedData eine innere Klasse ist?</p>
</blockquote>
<p>Letzteres. Terrain muss bekannt sein, damit du ein Element von Terrain forward deklarieren kannst. Einen Namespace würdest du hierzu einfach ein weiteres Mal öffnen, im Falle einer Klasse kannst du das Gewünschte gar nicht sagen.</p>
<p>Stefan.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744659</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744659</guid><dc:creator><![CDATA[DStefan]]></dc:creator><pubDate>Fri, 17 Jul 2009 08:44:52 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Fri, 17 Jul 2009 08:48:13 GMT]]></title><description><![CDATA[<p>Das heißt im Klartext, dass eine Vorwärtsdeklartion auf eine Innere Klasse immer UNMÖGLICH ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744664</guid><dc:creator><![CDATA[München]]></dc:creator><pubDate>Fri, 17 Jul 2009 08:48:13 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Fri, 17 Jul 2009 09:37:42 GMT]]></title><description><![CDATA[<p>München schrieb:</p>
<blockquote>
<p>Das heißt im Klartext, dass eine Vorwärtsdeklartion auf eine Innere Klasse immer UNMÖGLICH ist?</p>
</blockquote>
<p>Ja, siehe <a href="http://www.c-plusplus.info/forum/viewtopic-var-t-is-234000.html" rel="nofollow">http://www.c-plusplus.info/forum/viewtopic-var-t-is-234000.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744694</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744694</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 17 Jul 2009 09:37:42 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Fri, 17 Jul 2009 10:13:54 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>München schrieb:</p>
<blockquote>
<p>Das heißt im Klartext, dass eine Vorwärtsdeklartion auf eine Innere Klasse immer UNMÖGLICH ist?</p>
</blockquote>
<p>Ja, siehe <a href="http://www.c-plusplus.info/forum/viewtopic-var-t-is-234000.html" rel="nofollow">http://www.c-plusplus.info/forum/viewtopic-var-t-is-234000.html</a></p>
</blockquote>
<p>... und das ist doch auch konsequent! Du darfst etwas nicht verwenden, das nicht definiert ist. Und eine solche forward-Deklaration verwendet die äußere Klasse. Ich würde es schon ziemlich &quot;unnatürlich&quot; finden, wenn eine solche Deklaration akzeptiert würde.</p>
<p>Stefan.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744716</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744716</guid><dc:creator><![CDATA[DStefan]]></dc:creator><pubDate>Fri, 17 Jul 2009 10:13:54 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Fri, 17 Jul 2009 11:16:04 GMT]]></title><description><![CDATA[<p>DStefan schrieb:</p>
<blockquote>
<p>... und das ist doch auch konsequent! Du darfst etwas nicht verwenden, das nicht definiert ist. Und eine solche forward-Deklaration verwendet die äußere Klasse. Ich würde es schon ziemlich &quot;unnatürlich&quot; finden, wenn eine solche Deklaration akzeptiert würde.</p>
</blockquote>
<p>Ja, das ist der aktuelle Grund, wieso es nicht funktioniert, und macht so gesehen auch Sinn. Aber ganz konsequent finde ich es trotzdem nicht. Eine Vorwärtsdeklaration soll sagen, dass es einen Typen mit diesem Namen gibt - Nested hin oder her. Dass man die Klasse zusätzlich angibt, dient ja nur der Typsicherheit, deswegen muss die Klasse nicht zwingend bekannt sein (ok, im Status Quo schon, aber es wäre sicher kein Problem, für Vorwärtsdeklarationen von Nested Types diesbezüglich eine Ausnahme zu machen).</p>
<p>So, wie es momentan gelöst ist, wird man gezwungen, die innere Klasse aus der äusseren zu nehmen oder mit <code>void*</code> zu arbeiten und die Typsicherheit aufzugeben. Beides finde ich nicht unbedingt das Wahre.</p>
<p>Ähnliches sieht man ja zum Beispiel auch bei <code>enum</code> s, die momentan nicht vorwärtsdeklariert werden können. Hier soll sich der neue Standard ja auch ändern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744750</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744750</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 17 Jul 2009 11:16:04 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Fri, 17 Jul 2009 11:59:23 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>DStefan schrieb:</p>
<blockquote>
<p>... und das ist doch auch konsequent! Du darfst etwas nicht verwenden, das nicht definiert ist. Und eine solche forward-Deklaration verwendet die äußere Klasse. Ich würde es schon ziemlich &quot;unnatürlich&quot; finden, wenn eine solche Deklaration akzeptiert würde.</p>
</blockquote>
<p>Ja, das ist der aktuelle Grund, wieso es nicht funktioniert, und macht so gesehen auch Sinn. Aber ganz konsequent finde ich es trotzdem nicht. Eine Vorwärtsdeklaration soll sagen, dass es einen Typen mit diesem Namen gibt - Nested hin oder her. Dass man die Klasse zusätzlich angibt, dient ja nur der Typsicherheit, deswegen muss die Klasse nicht zwingend bekannt sein (ok, im Status Quo schon, aber es wäre sicher kein Problem, für Vorwärtsdeklarationen von Nested Types diesbezüglich eine Ausnahme zu machen).</p>
<p>So, wie es momentan gelöst ist, wird man gezwungen, die innere Klasse aus der äusseren zu nehmen oder mit <code>void*</code> zu arbeiten und die Typsicherheit aufzugeben. Beides finde ich nicht unbedingt das Wahre.</p>
<p>Ähnliches sieht man ja zum Beispiel auch bei <code>enum</code> s, die momentan nicht vorwärtsdeklariert werden können. Hier soll sich der neue Standard ja auch ändern.</p>
</blockquote>
<p>Ich verstehe deine Argumentation. Und es ist ja nicht so, dass ich die Sprache &quot;besudelt&quot; fände, sollte eine solche Deklaration möglich sein. (Falls du verstehst, was ich meine <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> ) Technisch ist eine solche Deklaration ganz Ok.</p>
<p>Meine Bedenken liegen eher auf der Bedeutungs-Ebene. Was bedeutet es (bei einem wohl ausgewogenen Design), wenn eine Klasse in einer anderen enthalten ist? Die innere Klasse ist ein Teil der Definition der äußeren, sie gehört ihr. Sie bedeutet nur etwas im Kontext der äußeren Klasse. Deshalb spreche ich von Konsequenz, wenn eine solche forward-Deklaration nicht möglich ist. Es würde mich einfach irritieren, solchen Code zu lesen. Etwas in der Art....</p>
<p>Was die forward-Deklaration von enums betrifft, sehe ich den Sinn nicht. Wofür würde man das benötigen? Hast du ein Beispiel?</p>
<p>Stefan.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744783</guid><dc:creator><![CDATA[DStefan]]></dc:creator><pubDate>Fri, 17 Jul 2009 11:59:23 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Fri, 17 Jul 2009 12:32:17 GMT]]></title><description><![CDATA[<p>DStefan schrieb:</p>
<blockquote>
<p>Meine Bedenken liegen eher auf der Bedeutungs-Ebene. Was bedeutet es (bei einem wohl ausgewogenen Design), wenn eine Klasse in einer anderen enthalten ist? Die innere Klasse ist ein Teil der Definition der äußeren, sie gehört ihr. Sie bedeutet nur etwas im Kontext der äußeren Klasse. Deshalb spreche ich von Konsequenz, wenn eine solche forward-Deklaration nicht möglich ist. Es würde mich einfach irritieren, solchen Code zu lesen. Etwas in der Art....</p>
</blockquote>
<p>Stimmt, da hast du völlig Recht. Meistens würde es auch eine freie Hilfsklasse tun.</p>
<p>Ich hatte bei mir ein <code>public</code> -Nested-Struct, das bestimmte Eigenschaften der äusseren Klasse zusammenfasste und als Ganzes herumgegeben werden konnte. Die einzige Instanz dieser inneren Klasse liegt in der äusseren. Mir schien hierbei die logische Bindung recht stark, sodass ich die Klasse innerhalb deklarierte. Aber Klassen, die im <code>public</code> -Bereich deklariert werden, sind sowieso ein bisschen speziell. Das ist schon einige Zeit her, heute würde ich wohl eher beide Klassen frei implementieren und gegebenenfalls in der einen (ursprünglich äusseren) ein <code>typedef</code> auf die andere einrichten. Mich hat es anfänglich halt ein wenig erstaunt, dass so eine Vorwärtsdeklaration nicht funktioniert. Aber inzwischen halte ich das nicht mehr für so schlimm... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>DStefan schrieb:</p>
<blockquote>
<p>Was die forward-Deklaration von enums betrifft, sehe ich den Sinn nicht. Wofür würde man das benötigen? Hast du ein Beispiel?</p>
</blockquote>
<p>Es hat eigentlich den gleichen Sinn wie bei Klassen: Man möchte nicht den Header mit der Definition einbinden, weil man nicht auf den Typ zugreift, sondern nur weiss, dass es sich um einen bestimmten Typen handelt - letztendlich also zur Gewährung von Typsicherheit.</p>
<p>Hm, anstatt hier ein künstliches Beispiel zu konstruieren, kann ich dir gleich einen Anwendungsfall von mir zeigen (es geht um ein Spiel):</p>
<pre><code class="language-cpp">// ==== Item.hpp ==================================

enum ItemType
{
    // einige Gegenstandstypen
};

// Item-Klasse und weiteres...
</code></pre>
<pre><code class="language-cpp">// ==== Player.hpp ================================

#include &quot;Item.hpp&quot; // &lt;- momentan erforderlich

class Player
{
    public:
        void CollectItem(ItemType NewItem);
};
</code></pre>
<p><code>Player</code> besitzt hier kein Member des Typs <code>ItemType</code> , sondern führt beim Einsammeln je nach Gegenstand unterschiedliche Aktionen aus, die in <code>CollectItem()</code> geregelt sind. <code>ItemType</code> wird also nur für diese eine Funktion gebraucht. Hier würde eine Vorwärtsdeklaration reichen, dann müsste man den Header <code>&quot;Item.hpp&quot;</code> nicht einbinden (ansonsten braucht der Spieler nämlich nichts über Gegenstände zu wissen). Erst in der <code>&quot;Player.cpp&quot;</code> wäre <code>&quot;Item.hpp&quot;</code> dann inkludiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744803</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744803</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 17 Jul 2009 12:32:17 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Fri, 17 Jul 2009 13:03:06 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>DStefan schrieb:</p>
<blockquote>
<p>Was die forward-Deklaration von enums betrifft, sehe ich den Sinn nicht. Wofür würde man das benötigen? Hast du ein Beispiel?</p>
</blockquote>
<p>Es hat eigentlich den gleichen Sinn wie bei Klassen: Man möchte nicht den Header mit der Definition einbinden, weil man nicht auf den Typ zugreift, sondern nur weiss, dass es sich um einen bestimmten Typen handelt - letztendlich also zur Gewährung von Typsicherheit.</p>
<p>Hm, anstatt hier ein künstliches Beispiel zu konstruieren, kann ich dir gleich einen Anwendungsfall von mir zeigen (es geht um ein Spiel):</p>
<pre><code class="language-cpp">// ==== Item.hpp ==================================

enum ItemType
{
    // einige Gegenstandstypen
};

// Item-Klasse und weiteres...
</code></pre>
<pre><code class="language-cpp">// ==== Player.hpp ================================

#include &quot;Item.hpp&quot; // &lt;- momentan erforderlich

class Player
{
    public:
        void CollectItem(ItemType NewItem);
};
</code></pre>
<p><code>Player</code> besitzt hier kein Member des Typs <code>ItemType</code> , sondern führt beim Einsammeln je nach Gegenstand unterschiedliche Aktionen aus, die in <code>CollectItem()</code> geregelt sind. <code>ItemType</code> wird also nur für diese eine Funktion gebraucht. Hier würde eine Vorwärtsdeklaration reichen, dann müsste man den Header <code>&quot;Item.hpp&quot;</code> nicht einbinden (ansonsten braucht der Spieler nämlich nichts über Gegenstände zu wissen). Erst in der <code>&quot;Player.cpp&quot;</code> wäre <code>&quot;Item.hpp&quot;</code> dann inkludiert.</p>
</blockquote>
<p>Hmmm - ich verstehe. Das wäre dann der zweite Anwendungsfall von forward-Deklarationen, also die Vermeidung von Header-Abhängigkeiten. Ist ja in großen Projekten durchaus ein Punkt. Ich hatte bei meiner Frage nur an den ersten Anwendungsfall gedacht, dass also bestimmte Datenstrukturen einfach nicht formulierbar sind, wenn man nicht forward deklarieren kann.</p>
<p>Danke für das Beispiel.</p>
<p>Stefan.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744835</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744835</guid><dc:creator><![CDATA[DStefan]]></dc:creator><pubDate>Fri, 17 Jul 2009 13:03:06 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Fri, 17 Jul 2009 21:41:54 GMT]]></title><description><![CDATA[<p>DStefan schrieb:</p>
<blockquote>
<p>Hmmm - ich verstehe. Das wäre dann der zweite Anwendungsfall von forward-Deklarationen, also die Vermeidung von Header-Abhängigkeiten. Ist ja in großen Projekten durchaus ein Punkt.</p>
</blockquote>
<p>Ich setze Vorwärtsdeklarationen eigentlich meistens aus diesem Grund ein...</p>
<p>DStefan schrieb:</p>
<blockquote>
<p>Ich hatte bei meiner Frage nur an den ersten Anwendungsfall gedacht, dass also bestimmte Datenstrukturen einfach nicht formulierbar sind, wenn man nicht forward deklarieren kann.</p>
</blockquote>
<p>Jetzt bin ich mir nicht sicher, ob ich dich richtig verstanden habe. Meinst du, falls sich zwei Klassen gegenseitig benötigen (über Zeiger/Referenzen), dass du eine zuerst deklarieren musst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1745085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1745085</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 17 Jul 2009 21:41:54 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Fri, 17 Jul 2009 22:00:45 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>DStefan schrieb:</p>
<blockquote>
<p>Ich hatte bei meiner Frage nur an den ersten Anwendungsfall gedacht, dass also bestimmte Datenstrukturen einfach nicht formulierbar sind, wenn man nicht forward deklarieren kann.</p>
</blockquote>
<p>Jetzt bin ich mir nicht sicher, ob ich dich richtig verstanden habe. Meinst du, falls sich zwei Klassen gegenseitig benötigen (über Zeiger/Referenzen), dass du eine zuerst deklarieren musst?</p>
</blockquote>
<p>Genau das! Ich finde, diese Art der Verwendung ist das entscheidende Argument für die Nützlichkeit von forward-Deklarationen. Ohne diese bräuchte man sie nicht. Die Möglichkeit zur Verringerung von Header-Abhängigkeiten ist für mich nur ein Nebeneffekt (wenn auch ein durchaus nützlicher).</p>
<p>Stefan.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1745093</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1745093</guid><dc:creator><![CDATA[DStefan]]></dc:creator><pubDate>Fri, 17 Jul 2009 22:00:45 GMT</pubDate></item></channel></rss>