<?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[Vorwaertsdeklaration bei Membern]]></title><description><![CDATA[<p>Sers,</p>
<p>habe gerade diesen Artikel gelesen:<br />
<a href="http://www.gotw.ca/gotw/007.htm" rel="nofollow">http://www.gotw.ca/gotw/007.htm</a><br />
und da steht folgendes:</p>
<pre><code class="language-cpp">//---------------------------------------------------------------
    // new file x.h: only TWO includes!
    //
    #include &quot;a.h&quot;  // class A
    #include &lt;iosfwd&gt;

    class C;
    class D;

    class X : public A {
    public:
             X        ( const C&amp; );
        D    Function1( int, char* );
        D    Function1( int, C );
        B&amp;   Function2( B );
        void Function3( std::wostringstream&amp; );
        std::ostream&amp; print( std::ostream&amp; ) const;
    private:
        class XImpl* pimpl_;
    };

    inline std::ostream&amp; operator&lt;&lt;( std::ostream&amp; os, const X&amp; x )
        { return x.print(os); }
        // NOTE: this does NOT require ostream's definition!
</code></pre>
<p>Diese Zeile verstehe ich nicht:</p>
<pre><code class="language-cpp">D    Function1( int, C );
</code></pre>
<p>Hier wird C und D benutzt (kein Zeiger oder Referenz), obwohl C.h und D.h NICHT inkludiert wurden, sondern nur eine Vorwaertsdeklaration benutzt wurde. Wieso geht das? Ich dachte eine Vorwaertsdeklaration reicht nur bei Zeigern und Referenzen aus?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/285466/vorwaertsdeklaration-bei-membern</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Apr 2026 06:04:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/285466.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 21 Apr 2011 08:52:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vorwaertsdeklaration bei Membern on Thu, 21 Apr 2011 08:52:17 GMT]]></title><description><![CDATA[<p>Sers,</p>
<p>habe gerade diesen Artikel gelesen:<br />
<a href="http://www.gotw.ca/gotw/007.htm" rel="nofollow">http://www.gotw.ca/gotw/007.htm</a><br />
und da steht folgendes:</p>
<pre><code class="language-cpp">//---------------------------------------------------------------
    // new file x.h: only TWO includes!
    //
    #include &quot;a.h&quot;  // class A
    #include &lt;iosfwd&gt;

    class C;
    class D;

    class X : public A {
    public:
             X        ( const C&amp; );
        D    Function1( int, char* );
        D    Function1( int, C );
        B&amp;   Function2( B );
        void Function3( std::wostringstream&amp; );
        std::ostream&amp; print( std::ostream&amp; ) const;
    private:
        class XImpl* pimpl_;
    };

    inline std::ostream&amp; operator&lt;&lt;( std::ostream&amp; os, const X&amp; x )
        { return x.print(os); }
        // NOTE: this does NOT require ostream's definition!
</code></pre>
<p>Diese Zeile verstehe ich nicht:</p>
<pre><code class="language-cpp">D    Function1( int, C );
</code></pre>
<p>Hier wird C und D benutzt (kein Zeiger oder Referenz), obwohl C.h und D.h NICHT inkludiert wurden, sondern nur eine Vorwaertsdeklaration benutzt wurde. Wieso geht das? Ich dachte eine Vorwaertsdeklaration reicht nur bei Zeigern und Referenzen aus?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052377</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052377</guid><dc:creator><![CDATA[Zeigerzeiger2]]></dc:creator><pubDate>Thu, 21 Apr 2011 08:52:17 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwaertsdeklaration bei Membern on Thu, 21 Apr 2011 08:58:41 GMT]]></title><description><![CDATA[<p>Ja. Um eine Funktion zu deklarieren, müssen die Parameter- und Rückgabe-Typen nicht vollständig sein. Das müssen die erst sein, wenn man die Funktion aufrufen bzw definieren will.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052382</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052382</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 21 Apr 2011 08:58:41 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwaertsdeklaration bei Membern on Thu, 21 Apr 2011 09:20:49 GMT]]></title><description><![CDATA[<p>Im Prinzip sind dem Compiler bei Klassendekleration (bei Methoden, Member etc.) die Typen egal, Hauptsache er weiß, dass es diese Typen gibt. Es kommt aber die Einschränkung hinzu, dass der Compiler die Größe der Klasse bestimmen können muss.<br />
Wenn du also einen Member vom Typ D festlegst, kennt der Compiler nicht die Größe von D und gibt einen Fehler. Ist der Member vom Typ D* gibt es kein Problem, da Zeiger immer die gleiche Größe haben. Entsprechend gilt bei Methoden: diese (und insbesondere deren Parameter- und Rückgabetypen) wirken sich nicht auf die Typgröße aus, sind dem Compiler also erstmal relativ schnuppe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052391</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052391</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Thu, 21 Apr 2011 09:20:49 GMT</pubDate></item></channel></rss>