<?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>Hallo zusammen!</p>
<p>Was ist der Vorteil einer Vorwärtsdeklaration zu einem include?<br />
Gibt es eine Situation, in der es keinen Unterschied macht, wenn man eine Vorwärtsdeklaration oder ein include macht?<br />
Gibt es eine Situation, in der ein include besser ist als eine Vorwärtsdeklaration?</p>
<p>Danke euch!</p>
<p>Viele Grüße<br />
Rolff</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/261275/vorwärtsdeklaration</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 09:16:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/261275.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 16 Feb 2010 08:13:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vorwärtsdeklaration on Tue, 16 Feb 2010 08:13:58 GMT]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Was ist der Vorteil einer Vorwärtsdeklaration zu einem include?<br />
Gibt es eine Situation, in der es keinen Unterschied macht, wenn man eine Vorwärtsdeklaration oder ein include macht?<br />
Gibt es eine Situation, in der ein include besser ist als eine Vorwärtsdeklaration?</p>
<p>Danke euch!</p>
<p>Viele Grüße<br />
Rolff</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1856359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856359</guid><dc:creator><![CDATA[Rolff]]></dc:creator><pubDate>Tue, 16 Feb 2010 08:13:58 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Tue, 16 Feb 2010 08:29:16 GMT]]></title><description><![CDATA[<p>Hallo du!</p>
<p>Hast du deine Hausaufgaben schon in der Vergangenheit nicht selbst gemacht?<br />
Was sind die Vor- und Nachteile beim Erledigen der Hausaufgaben?<br />
Gibt es eine Situation, in der du eher die Lösung deiner Aufgaben bekommst, als beim purem Abschreiben der Aufgabenstellung?</p>
<p>Danke dir!</p>
<p>Viele Grüße<br />
_matze</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1856365</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856365</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Tue, 16 Feb 2010 08:29:16 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Tue, 16 Feb 2010 08:58:50 GMT]]></title><description><![CDATA[<p>Rolff schrieb:</p>
<blockquote>
<p>Was ist der Vorteil einer Vorwärtsdeklaration zu einem include?</p>
</blockquote>
<p>Es werden weniger Abhängigkeiten erzeugt. Zyklische Abhängigkeiten werden vermieden.</p>
<blockquote>
<p>Gibt es eine Situation, in der es keinen Unterschied macht, wenn man eine Vorwärtsdeklaration oder ein include macht?</p>
</blockquote>
<p>Wenn man einen Header inkludiert, in dem nur die Vorwärtsdeklaration steht.</p>
<blockquote>
<p>Gibt es eine Situation, in der ein include besser ist als eine Vorwärtsdeklaration?</p>
</blockquote>
<p>Wenn eine Vorwärtsdeklaration nicht ausreichend ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1856373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856373</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Tue, 16 Feb 2010 08:58:50 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Tue, 16 Feb 2010 08:56:16 GMT]]></title><description><![CDATA[<p>Guten Morgen.</p>
<p>Also der Trick ist folgender. Wenn du 2 Funktionen hast nennen wir sie A und B. Und nun rufst du in funktion A die Funktion B auf. Dann muss der Compiler zur Laufzeit wissen, was mit Funktion B gemeint ist. Nun kannst du natürlich B vor A Deklarieren . Also in Etwa so :</p>
<pre><code class="language-cpp">void FunktionB()
{
}

void FunktionA()
{
FunktionB();
}
</code></pre>
<p>Eine andere Möglichkeit ist es eine Vorwärtsdeklartion durchzuführe ;:</p>
<pre><code class="language-cpp">void FunktionB();
void FuntkionA();

void FunktionB()
{
}

void FunktionA()
{
FunktionB();
}
</code></pre>
<p>Nun weiß der Compiler berits über die Funktionen bescheid, aber noch nichts über das Innenleben, das kommt später.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1856374</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856374</guid><dc:creator><![CDATA[Fischkopf2009]]></dc:creator><pubDate>Tue, 16 Feb 2010 08:56:16 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Tue, 16 Feb 2010 09:23:32 GMT]]></title><description><![CDATA[<p>Bei Funktionen find ich es jetzt nicht wichtig, eher vielleicht bei Klassen:</p>
<pre><code class="language-cpp">class B;

class A
{
    B* b;
};

class B
{
    A* a;
};
</code></pre>
<p>Aber es kommt selten vor, dass ich das brauche.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1856384</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856384</guid><dc:creator><![CDATA[freaky]]></dc:creator><pubDate>Tue, 16 Feb 2010 09:23:32 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Tue, 16 Feb 2010 09:49:17 GMT]]></title><description><![CDATA[<p>FreakY&lt;3Cpp schrieb:</p>
<blockquote>
<p>Aber es kommt selten vor, dass ich das brauche.</p>
</blockquote>
<p>Wieso &quot;brauche&quot;? Eine Vorwärtsdeklaration ist das Minimum, wenn man einen Typ benutzen will. Wenn man damit auskommt, ist das gut. &quot;Brauchen&quot; tut man ein Include, und zwar holt man sich damit in der Regel mehr Abhängigkeiten (und Compilezeit) ins Boot, als man haben will.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1856395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856395</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Tue, 16 Feb 2010 09:49:17 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Tue, 16 Feb 2010 12:41:45 GMT]]></title><description><![CDATA[<p>FreakY&lt;3Cpp schrieb:</p>
<blockquote>
<p>Aber es kommt selten vor, dass ich das brauche.</p>
</blockquote>
<p>Wirklich? Ich setze die Vorwärtsdeklarationen so oft wie möglich ein, weil sie Abhängigkeiten und somit Kompilierzeit einsparen. Ich hätte starke Bedenken, wenn ich das nicht tun würde (abgesehen davon, dass es z.B. bei zyklischen Abhängigkeiten gar nicht ohne geht).</p>
<p>Ich mache teilweise sogar sowas:</p>
<pre><code class="language-cpp">namespace AnyLib // fremde Bibliothek
{
    template &lt;typename T&gt;
    class AnyClass; // dort vorkommendes Template

    typedef AnyClass&lt;float&gt; FloatClass; // dort vorkommendes Typedef
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1856515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856515</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 16 Feb 2010 12:41:45 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Tue, 16 Feb 2010 18:21:43 GMT]]></title><description><![CDATA[<p>Hmm. Das halte ich aber für gefährlich, da du dich um Sachen kümmern musst, die eigentlich nur die Bibliotheksentwickler kümmern müsste..<br />
Ich denke, dass es da auch Portabilitätsprobleme geben kann. (z.B wie in der STL)</p>
<p>Ich hoffe daher, dass das eher eine Ausnahme bildet, wenn es wirklich nicht anderst geht. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1856736</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856736</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 16 Feb 2010 18:21:43 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Tue, 16 Feb 2010 18:38:41 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Hmm. Das halte ich aber für gefährlich, da du dich um Sachen kümmern musst, die eigentlich nur die Bibliotheksentwickler kümmern müsste..<br />
Ich denke, dass es da auch Portabilitätsprobleme geben kann. (z.B wie in der STL)</p>
<p>Ich hoffe daher, dass das eher eine Ausnahme bildet, wenn es wirklich nicht anderst geht. <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>
</blockquote>
<p>Was soll daran gefährlich sein? Worum müsste man sich da kümmern, was nur der Bibliotheksentwickler kümmern müsste? Ich muss ja sowieso wissen wo die Klasse ist und wie sie heisst.<br />
Ich mache dies absolut auch regelmässig. Eine Vorwärtsdeklaration sollte man immer einem <code>include</code> vorziehen, wenn es denn geht.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1856746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856746</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 16 Feb 2010 18:38:41 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Tue, 16 Feb 2010 18:47:59 GMT]]></title><description><![CDATA[<p>Bei Standardsachen kann das in der Tat gefährlich sein, weil StdLib-Implementierungen noch zusätzliche Default-Templateparameter bereitstellen dürfen und man so keine Portabilität gewährleisten kann. Aber ich meinte jetzt abgesehen davon. Und da ist eine Vorwärtsdeklaration sicher besser, als die Headerdateien (welche bei Templates immer noch die gesamte Implementierung enthalten) einzubinden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1856754</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856754</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 16 Feb 2010 18:47:59 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Tue, 16 Feb 2010 18:51:45 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9752">@dravere</a>:<br />
Ich habe das auf Nexus bezogen und den typedef Vorwärtsdeklarationen.</p>
<p>z.B Wie deklarierst du einen Iterator für basic_string vor?</p>
<p>21.3/6 schrieb:</p>
<blockquote>
<p>typedef implementation defined iterator;</p>
</blockquote>
<p>Dazu kommt noch, dass es per Standard gar nicht erlaubt ist std zu erweitern. (also geht die obige Methode schon mal nicht). Dazu kommt ja noch, dass weitere template Parameter erlaubt sind (und so könnte das auch sonst eine Bibliothek handhaben, dass lediglich die typedefs funktionieren müssen).</p>
<p>Vorwärtsdeklarationen im allgemeinen sind toll. Habe ja nicht umsonst <a href="http://www.drakon.ch/?id=&amp;offset=2&amp;mobile=0&amp;show_entry=77" rel="nofollow">was</a> darüber geschrieben. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1856756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856756</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 16 Feb 2010 18:51:45 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Tue, 16 Feb 2010 18:57:51 GMT]]></title><description><![CDATA[<p>Eine kurze Ergänzung zur Vorwärtsdeklaration von Klassen aus der Standardbibliothek:<br />
Dies gehört in den Bereich &quot;gar nicht möglich&quot;. Es ist nämlich undefiniert.</p>
<blockquote>
<p>It is undefined for a C++ program to add declarations or definitions to namespace std or namespaces within namespace std unless otherwise specified.</p>
</blockquote>
<p>Gut, man kann sich nun darüber streiten, ob eine Vorwärtsdeklaration auch eine Deklaration ist, aber meiner Meinung nach schon <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1856759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856759</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 16 Feb 2010 18:57:51 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Tue, 16 Feb 2010 18:59:43 GMT]]></title><description><![CDATA[<p>Ja, wie gesagt würde ich das nicht auf die Standardbibliothek anwenden (ausser <code>&lt;iosfwd&gt;</code> gibts da keine portable Möglichkeit). Aber bei anderen Bibliotheken halte ich Template-Vorwärtsdeklarationen und entsprechende Typedefs durchaus für gerechtfertigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1856760</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856760</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 16 Feb 2010 18:59:43 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Tue, 16 Feb 2010 19:00:21 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9752">@dravere</a>:<br />
Ich habe das auf Nexus bezogen und den typedef Vorwärtsdeklarationen.<br />
z.B Wie deklarierst du einen Iterator für basic_string vor?</p>
</blockquote>
<p>Das ist aber etwas völlig anderes, als das was Nexus gezeigt hat. Der <code>basic_string&lt;...&gt;::iterator</code> ist abhängig von der Klassendefinition.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1856761</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856761</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 16 Feb 2010 19:00:21 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Tue, 16 Feb 2010 19:27:23 GMT]]></title><description><![CDATA[<p>Stimmt. Schlechtes Beispiel, aber das Problem bleibt ja.</p>
<p>Wenn jetzt plötzlich die Bibliotheksentwickler einen Parameter im typedef ändern wollen, dann muss man da auch nachziehen. Solch eine Abhängigkeit halte ich für schlecht.</p>
<p>Und nein man kann sich nicht darüber streiten. <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>3.1/1 schrieb:</p>
<blockquote>
<p>A declaration (clause 7) introduces names into a translation unit or redeclares names introduced by previous<br />
declarations.</p>
</blockquote>
<p>Möglich ist es schon, aber wie du sagst es ist undefiniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1856770</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856770</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 16 Feb 2010 19:27:23 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Tue, 16 Feb 2010 20:09:33 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Wenn jetzt plötzlich die Bibliotheksentwickler einen Parameter im typedef ändern wollen, dann muss man da auch nachziehen. Solch eine Abhängigkeit halte ich für schlecht.</p>
</blockquote>
<p>Und es gäbe einen Kompilerfehler. Innert 30 Sekunden hast du das angepasst und hast immer noch die extremen Vorteile davon, dass die Kompilierzeit extrem viel schneller ist <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="😉"
    /><br />
Wenn du die Version einer Bibliothek änderst, welche du verwendest, dann musst du meistens irgendwas anpassen gehen. Daher ordne ich dies ganz einfach dieser Arbeit zu. Ich sehe jedenfalls keinen extremen Nachteil und die Vorteile überwiegen.</p>
<p>Aber klar, es gibt natürlich auch Fälle wo eine Vorwärtsdeklaration nicht nötig ist, weil womöglich die Entwickler der Bibliothek schon klug waren und entsprechende Header anbieten. Als Dogma ist es definitiv nicht zu verstehen, dass man immer Vorwärtsdeklarationen verwenden sollte, eher als eine Art von Richtlinie <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>drakon schrieb:</p>
<blockquote>
<p>Und nein man kann sich nicht darüber streiten. <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>3.1/1 schrieb:</p>
<blockquote>
<p>A declaration (clause 7) introduces names into a translation unit or redeclares names introduced by previous<br />
declarations.</p>
</blockquote>
</blockquote>
<p>w000t! *holt eine Flasche Champagner*<br />
Endlich mal eine klare Definition! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1856782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856782</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 16 Feb 2010 20:09:33 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Tue, 16 Feb 2010 20:43:46 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>drakon schrieb:</p>
<blockquote>
<p>Und nein man kann sich nicht darüber streiten. <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>3.1/1 schrieb:</p>
<blockquote>
<p>A declaration (clause 7) introduces names into a translation unit or redeclares names introduced by previous<br />
declarations.</p>
</blockquote>
</blockquote>
<p>w000t! *holt eine Flasche Champagner*<br />
Endlich mal eine klare Definition! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
</blockquote>
<p>Es gibt natürlich hierzu auch eine Ausnahme, d.h. eine Deklaration, die keinen Namen (wieder-)einführt...</p>
<pre><code class="language-cpp">static union { int:0; };
</code></pre>
<p>sinnlos zugegeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1856786</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856786</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 16 Feb 2010 20:43:46 GMT</pubDate></item></channel></rss>