<?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[Reihenfolge von Klassendeklarationen - incomplete type]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich möchte eine Klasse in einer anderen aufrufen:</p>
<pre><code class="language-cpp">class b;

class a
{
    b B;
};

class b 
{
};

int main(int argc, char *argv[])
{
    return (0);
}
</code></pre>
<p>Mit Dev-C++ kompiliert, kommt folgende Fehlermeldung:</p>
<blockquote>
<p>field `B' has incomplete type</p>
</blockquote>
<p>Das verstehe ich nicht. Ich habe doch eine leere Deklaration von Klasse b vor die Deklaration von Klasse a gestellt. Was ist falsch?</p>
<p>Grüße,</p>
<p>CMike</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/258407/reihenfolge-von-klassendeklarationen-incomplete-type</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 09:11:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/258407.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 10 Jan 2010 10:49:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Reihenfolge von Klassendeklarationen - incomplete type on Sun, 10 Jan 2010 10:49:35 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich möchte eine Klasse in einer anderen aufrufen:</p>
<pre><code class="language-cpp">class b;

class a
{
    b B;
};

class b 
{
};

int main(int argc, char *argv[])
{
    return (0);
}
</code></pre>
<p>Mit Dev-C++ kompiliert, kommt folgende Fehlermeldung:</p>
<blockquote>
<p>field `B' has incomplete type</p>
</blockquote>
<p>Das verstehe ich nicht. Ich habe doch eine leere Deklaration von Klasse b vor die Deklaration von Klasse a gestellt. Was ist falsch?</p>
<p>Grüße,</p>
<p>CMike</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1836122</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1836122</guid><dc:creator><![CDATA[CMike]]></dc:creator><pubDate>Sun, 10 Jan 2010 10:49:35 GMT</pubDate></item><item><title><![CDATA[Reply to Reihenfolge von Klassendeklarationen - incomplete type on Sun, 10 Jan 2010 10:57:20 GMT]]></title><description><![CDATA[<p>Das Problem ist, dass a eine Definition von b benötigt. Es gibt an dieser Stelle jedoch nur eine Deklaration der Klass b. Die Definition der Klasse b kommt dann erst unter der Definition von der Klasse a.</p>
<p>Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1836129</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1836129</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Sun, 10 Jan 2010 10:57:20 GMT</pubDate></item><item><title><![CDATA[Reply to Reihenfolge von Klassendeklarationen - incomplete type on Sun, 10 Jan 2010 10:59:17 GMT]]></title><description><![CDATA[<p>Für die Defintion von a muss der Compiler wissen wie groß b ist. das ist ihm zu dem Zeitpunkt nicht bekannt. Das heißt die Defintion von b muss vor a stehen.</p>
<pre><code class="language-cpp">class b
{
};
class a
{
    b B;
};
</code></pre>
<p>Eine andere Lösung ist der Klasse a einen Zeiger auf b zu verpassen. Unabhängig von der Defintion von b weiß der Compiler dass ein b* 4byte oder ein anderer Wert (je nach Platform) groß ist.</p>
<pre><code class="language-cpp">class b;
class a
{
    b* B;
};
</code></pre>
<p>In diesem Fall braucht der Compiler die Definition von b erst, wenn Methoden von b aufgerufen werden B-&gt;f();</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1836132</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1836132</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Sun, 10 Jan 2010 10:59:17 GMT</pubDate></item><item><title><![CDATA[Reply to Reihenfolge von Klassendeklarationen - incomplete type on Sun, 10 Jan 2010 11:13:55 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19131">@Theta</a> &amp; BrotBernd</p>
<p>Vielen Dank für Eure superschnellen Antworten! So ist es klar.</p>
<p>Grüße,</p>
<p>CMike</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1836137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1836137</guid><dc:creator><![CDATA[CMike]]></dc:creator><pubDate>Sun, 10 Jan 2010 11:13:55 GMT</pubDate></item><item><title><![CDATA[Reply to Reihenfolge von Klassendeklarationen - incomplete type on Sun, 10 Jan 2010 12:36:41 GMT]]></title><description><![CDATA[<p>Weil so´n Spaß macht, hier gleich noch ein paar Zeilen Code dazu:</p>
<pre><code class="language-cpp">#include &lt;cstdlib&gt;
#include &lt;iostream&gt;

using namespace std;

class b;

class a
{
    int i;
    b* B;
    // hier mit Pointer aufrufen, weil Größe von b im Memory bekannt sein muss, siehe:
    // http://www.c-plusplus.net/forum/viewtopic-var-t-is-258407.html

    // die folgende Zeile gäbe hier einen Fehler, weil B-&gt;f1 noch nicht definiert ist
    //i = B-&gt;f1;

    void f1();
};

// hier würde die Definition von a::f1 einen Fehler auslösen, weil B-&gt;f1 noch
// nicht definiert ist.
/*
void a::f1()
{
     int i = B-&gt;f1();
}
*/

class b
{
public:
    int f1() {
        return(0);
    };
};

// so läuft´s
void a::f1()
{
    int i = B-&gt;f1();
}

int main(int argc, char *argv[])
{
    b *B1, B2;
    B1-&gt;f1();
    B2.f1();

    system(&quot;PAUSE&quot;);
    return EXIT_SUCCESS;
}
</code></pre>
<p>Nochmals Danke für die Anregungen.</p>
<p>Grüße,</p>
<p>CMike</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1836191</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1836191</guid><dc:creator><![CDATA[CMike]]></dc:creator><pubDate>Sun, 10 Jan 2010 12:36:41 GMT</pubDate></item><item><title><![CDATA[Reply to Reihenfolge von Klassendeklarationen - incomplete type on Sun, 10 Jan 2010 12:49:08 GMT]]></title><description><![CDATA[<p>Willkommen im Forum cmkike<br />
hier noch ein <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39453.html" rel="nofollow">Tipp</a><br />
Versuche system(&quot;pause&quot;), wenn möglich zu vermeiden <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/1836204</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1836204</guid><dc:creator><![CDATA[*MOP*]]></dc:creator><pubDate>Sun, 10 Jan 2010 12:49:08 GMT</pubDate></item><item><title><![CDATA[Reply to Reihenfolge von Klassendeklarationen - incomplete type on Sun, 10 Jan 2010 14:09:27 GMT]]></title><description><![CDATA[<p>Darf ich dir auch noch den Beitrag hier empfehlen:<br />
<a href="http://drakon.ch/?id=&amp;offset=2&amp;mobile=0&amp;show_entry=77" rel="nofollow">Definitionen und Deklarationen in C++</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1836275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1836275</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 10 Jan 2010 14:09:27 GMT</pubDate></item><item><title><![CDATA[Reply to Reihenfolge von Klassendeklarationen - incomplete type on Tue, 12 Jan 2010 11:53:08 GMT]]></title><description><![CDATA[<p>@ [MOP]: Danke für den Tipp!</p>
<p>@ drakon: Danke für den Link. Das ist genau die Art Erläuterung, die ich gesucht habe!</p>
<p>Grüße,</p>
<p>CMike</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1837457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1837457</guid><dc:creator><![CDATA[CMike]]></dc:creator><pubDate>Tue, 12 Jan 2010 11:53:08 GMT</pubDate></item></channel></rss>