<?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[Aufeinander zugreifende Klassen]]></title><description><![CDATA[<p>Hallo,<br />
Kann mir jemand sagen, wieso mein Compiler den folgenden Code(c++) nicht kompilieren will und erklären, wie man es besser machen sollte?</p>
<pre><code>class a
{
 	  public:
                                         void test(b einB);  //Zeile 6
};

class b
{
 	  public:
 	  		 		 void Ausgabe(a einA);
};
void a::test(b eineB)
{                                                            //Zeile 16
}
void b:: Ausgabe(a EinA)
{
}
</code></pre>
<p>Die Fehlermeldung lautet:</p>
<p>Zeile 6 expected <code>;' before '(' token Zeile 16 no \</code>void a::test(b)' member function declared in class `a'</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/305889/aufeinander-zugreifende-klassen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 08 Aug 2026 12:07:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/305889.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 11 Jul 2012 14:46:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Aufeinander zugreifende Klassen on Wed, 11 Jul 2012 14:46:58 GMT]]></title><description><![CDATA[<p>Hallo,<br />
Kann mir jemand sagen, wieso mein Compiler den folgenden Code(c++) nicht kompilieren will und erklären, wie man es besser machen sollte?</p>
<pre><code>class a
{
 	  public:
                                         void test(b einB);  //Zeile 6
};

class b
{
 	  public:
 	  		 		 void Ausgabe(a einA);
};
void a::test(b eineB)
{                                                            //Zeile 16
}
void b:: Ausgabe(a EinA)
{
}
</code></pre>
<p>Die Fehlermeldung lautet:</p>
<p>Zeile 6 expected <code>;' before '(' token Zeile 16 no \</code>void a::test(b)' member function declared in class `a'</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2231935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2231935</guid><dc:creator><![CDATA[irgendwas]]></dc:creator><pubDate>Wed, 11 Jul 2012 14:46:58 GMT</pubDate></item><item><title><![CDATA[Reply to Aufeinander zugreifende Klassen on Wed, 11 Jul 2012 17:58:14 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class a
{
public:
    void test(b einB); //Zeile 6
};

class b
{
public:
    void Ausgabe(a einA);
};

void a::test(b eineB)
{
    //Zeile 16
}

void b:: Ausgabe(a EinA)
{
}
</code></pre>
<p>So, schon mal in C++-Codetags und formattiert.<br />
Also, was ist der Fehler?<br />
Ganz einfach:</p>
<p><code>b</code> ist zu dem Zeitpunkt der Definition von <code>a</code> nicht definiert. d. h., der Compiler kennt <code>b</code> noch nicht, du kannst also kein Stackobjekt von <code>b</code> als Funktionsparameter nehmen und dann damit arbeiten.</p>
<p>Das, was du also hast nennt sich zyklische Abhängigkeit.</p>
<p><strong>Lösung</strong>: Du nimmst eine Vorwärtsdeklaration:</p>
<pre><code class="language-cpp">class b;

class a
{
public:
    void test(b einB); //Zeile 6
};

class b
{
public:
    void Ausgabe(a einA);
};

void a::test(b eineB) //So, zu *diesem* Zeitpunkt ist b definiert. Hier kannst du also damit arbeiten.
{
    //Zeile 16
}

void b:: Ausgabe(a EinA)
{
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2231938</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2231938</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 11 Jul 2012 17:58:14 GMT</pubDate></item><item><title><![CDATA[Reply to Aufeinander zugreifende Klassen on Wed, 11 Jul 2012 17:55:38 GMT]]></title><description><![CDATA[<p>Die Vorwärtsdeklaration genügt auch ohne Referenz.<br />
<a href="http://www.c-plusplus.net/forum/p1993089#1993089" rel="nofollow">http://www.c-plusplus.net/forum/p1993089#1993089</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2231995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2231995</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Wed, 11 Jul 2012 17:55:38 GMT</pubDate></item><item><title><![CDATA[Reply to Aufeinander zugreifende Klassen on Wed, 11 Jul 2012 17:56:42 GMT]]></title><description><![CDATA[<p>wxSkip schrieb:</p>
<blockquote>
<p>Die Vorwärtsdeklaration genügt auch ohne Referenz.<br />
<a href="http://www.c-plusplus.net/forum/p1993089#1993089" rel="nofollow">http://www.c-plusplus.net/forum/p1993089#1993089</a></p>
</blockquote>
<p>Stimmt, weil ich die Funktionen erst nach bs Definition definiere. Hab' da nicht mitgedacht, klar haste Recht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2231996</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2231996</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 11 Jul 2012 17:56:42 GMT</pubDate></item><item><title><![CDATA[Reply to Aufeinander zugreifende Klassen on Fri, 13 Jul 2012 10:05:42 GMT]]></title><description><![CDATA[<p>Wieso funktioniert das hier jetzt nicht? Egal, ob ich Klasse a vor b definiere oder umgekehrt, der Compiler zeigt mir einen Fehler an.</p>
<pre><code class="language-cpp">#include &lt;iostream.h&gt;
class a;
class b;

class b
{
 	  private:
		       friend void a::atest();
	  		 void btest()	{	cout &lt;&lt; &quot;Hallo&quot;;	}
};
class a
{
 	  public:
	  		 void atest();
			   b einB;		 
};

void a::atest()
{
 		 einB.btest();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2232384</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2232384</guid><dc:creator><![CDATA[irgendwas]]></dc:creator><pubDate>Fri, 13 Jul 2012 10:05:42 GMT</pubDate></item><item><title><![CDATA[Reply to Aufeinander zugreifende Klassen on Fri, 13 Jul 2012 11:03:14 GMT]]></title><description><![CDATA[<p>&quot;friend void a::atest();&quot; kannste nicht schreiben, wenn a ein unvollständiger typ ist. Aber du kannst stattdessen &quot;friend class a;&quot; schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2232403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2232403</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 13 Jul 2012 11:03:14 GMT</pubDate></item><item><title><![CDATA[Reply to Aufeinander zugreifende Klassen on Fri, 13 Jul 2012 11:11:47 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream.h&gt; 
class a; 
class b; 

class b 
{ 
       private: 
               friend void a::atest();///HIer ist a noch nicht definiert, es gibt also noch keinen Member von [c]a[/c] der [c]atest()[/c] heißt.
</code></pre>
<p><code>friend</code> ist übrigens meistens keine so gute Idee (dazu gibt es ein Zitat).<br />
Nimm also kks Vorschlag (wenn es denn umbedingt sein muss).<br />
Übrigens, was hast du denn für einen Compiler? Einen von den wilden Neunzigern? Standardheader haben seit C++98 keine Dateiendung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2232408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2232408</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 13 Jul 2012 11:11:47 GMT</pubDate></item><item><title><![CDATA[Reply to Aufeinander zugreifende Klassen on Fri, 13 Jul 2012 11:12:02 GMT]]></title><description><![CDATA[<p>Abgesehen von der Benutzung von iostream.h und cout ohne std, die auf einen Compiler hindeuten, der seit 15 Jahren veraltet ist:</p>
<p>Du kannst keine Memberfunktion als friend deklarieren, bevor der Compiler sie nicht gesehen hat. Du kannst:</p>
<ul>
<li>Die ganze Klasse a als friend angeben.</li>
<li>Dir eine Zwischenklasse basteln, die ungefähr den gleichen Effekt hat wie das friend:<br />
<a href="http://stackoverflow.com/questions/6310720/declare-a-member-function-of-a-forward-declared-class-as-friend?answertab=votes#tab-top" rel="nofollow">http://stackoverflow.com/questions/6310720/declare-a-member-function-of-a-forward-declared-class-as-friend?answertab=votes#tab-top</a></li>
<li>Darüber nachdenken, ob hier überhaupt diese Abhängigkeiten nötig sind. Bei abstrakten a und b kann ich das nicht beurteilen. Häufig ist so etwas aber ein Designfehler. Ein a hat ein b, gleichzeitig sind alle b ein Freund von einem bestimmten anderen Teil aller a? Klingt nach einer komischen Beziehung.</li>
</ul>
]]></description><link>https://www.c-plusplus.net/forum/post/2232409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2232409</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 13 Jul 2012 11:12:02 GMT</pubDate></item><item><title><![CDATA[Reply to Aufeinander zugreifende Klassen on Fri, 13 Jul 2012 12:49:42 GMT]]></title><description><![CDATA[<p>Ich hab die beta Version von c++ 5. Zeigt zwar dauernd Fehler an, die es nicht gibt, geht aber halbwegs. Ich hab auch header Dateien ohne Endung mit std, aber bei c++ in 21 Tagen werden fast immer die alten Header Dateien benutzt, da habe ich mich dran gewöhnt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2232441</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2232441</guid><dc:creator><![CDATA[irgendwas]]></dc:creator><pubDate>Fri, 13 Jul 2012 12:49:42 GMT</pubDate></item><item><title><![CDATA[Reply to Aufeinander zugreifende Klassen on Fri, 13 Jul 2012 13:01:36 GMT]]></title><description><![CDATA[<p>irgendwas schrieb:</p>
<blockquote>
<p>Ich hab die beta Version von c++ 5.</p>
</blockquote>
<p>Meinst du DEV C++?</p>
<blockquote>
<p>Zeigt zwar dauernd Fehler an, die es nicht gibt, geht aber halbwegs. Ich hab auch header Dateien ohne Endung mit std, aber bei c++ in 21 Tagen werden fast immer die alten Header Dateien benutzt, da habe ich mich dran gewöhnt.</p>
</blockquote>
<p>Schlechtes Buch. Nicht benutzen! Versuch es noch irgendwie zu Geld zu machen und guck dir mal den zweiten Link in meiner Signatur an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2232448</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2232448</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 13 Jul 2012 13:01:36 GMT</pubDate></item><item><title><![CDATA[Reply to Aufeinander zugreifende Klassen on Fri, 13 Jul 2012 13:28:41 GMT]]></title><description><![CDATA[<p>Ja, dev c++.<br />
c++ in 21 Tagen hab ich eh schon durch.<br />
Ich guck mal, was es so in meiner bibliothek gibt, ansonsten kauf ich mir vielleicht &quot;C++: Objektorientiertes Programmieren von Anfang an&quot;, ist noch am billigsten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2232461</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2232461</guid><dc:creator><![CDATA[irgendwas]]></dc:creator><pubDate>Fri, 13 Jul 2012 13:28:41 GMT</pubDate></item><item><title><![CDATA[Reply to Aufeinander zugreifende Klassen on Fri, 13 Jul 2012 13:45:02 GMT]]></title><description><![CDATA[<p>irgendwas schrieb:</p>
<blockquote>
<p>Ich guck mal, was es so in meiner bibliothek gibt, ansonsten kauf ich mir vielleicht &quot;C++: Objektorientiertes Programmieren von Anfang an&quot;, ist noch am billigsten.</p>
</blockquote>
<p>Tut mir jetzt echt Leid dir das sagen zu müssen, aber Fachbücher fürs Programmieren kosten durchschnittlich 40€.<br />
Also lieber einmal ein gutes Buch kaufen (C++-Primer), und dann <strong>hast</strong> du es, anstatt wie jetzt nochmal eins kaufen usw.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2232464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2232464</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 13 Jul 2012 13:45:02 GMT</pubDate></item><item><title><![CDATA[Reply to Aufeinander zugreifende Klassen on Fri, 13 Jul 2012 14:41:11 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Versuch es noch irgendwie zu Geld zu machen[...]</p>
</blockquote>
<p>Damit der nächste mit den gleichen Problemen kommt. <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="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2232481</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2232481</guid><dc:creator><![CDATA[freaky]]></dc:creator><pubDate>Fri, 13 Jul 2012 14:41:11 GMT</pubDate></item><item><title><![CDATA[Reply to Aufeinander zugreifende Klassen on Fri, 13 Jul 2012 14:55:47 GMT]]></title><description><![CDATA[<p>FreakY&lt;3Cpp schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Versuch es noch irgendwie zu Geld zu machen[...]</p>
</blockquote>
<p>Damit der nächste mit den gleichen Problemen kommt. <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="😃"
    /></p>
</blockquote>
<p>Ich fürchte, das lässt sich sowieso nicht vermeiden. So macht der Verlag wenigstens nicht noch mehr Gewinn und der Threadersteller hat nicht so große Scheu, sich tatsächlich ein besseres Buch zu kaufen. Menschen hängen leider sehr an Sachen, für die sie Geld ausgegeben haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2232485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2232485</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 13 Jul 2012 14:55:47 GMT</pubDate></item><item><title><![CDATA[Reply to Aufeinander zugreifende Klassen on Fri, 13 Jul 2012 16:18:19 GMT]]></title><description><![CDATA[<p>Ich hab mir &quot;c++ in 21 Tagen&quot; doch nicht gekauft, das gibts umsonst im Internet.<br />
&quot;Der C++ Programmierer&quot; hört sich noch ganz gut an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2232518</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2232518</guid><dc:creator><![CDATA[irgendwas]]></dc:creator><pubDate>Fri, 13 Jul 2012 16:18:19 GMT</pubDate></item><item><title><![CDATA[Reply to Aufeinander zugreifende Klassen on Fri, 13 Jul 2012 17:51:01 GMT]]></title><description><![CDATA[<p>irgendwas schrieb:</p>
<blockquote>
<p>&quot;Der C++ Programmierer&quot; hört sich noch ganz gut an.</p>
</blockquote>
<p>Ja, der ist gut. Hol in dir, wenn du willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2232536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2232536</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 13 Jul 2012 17:51:01 GMT</pubDate></item><item><title><![CDATA[Reply to Aufeinander zugreifende Klassen on Fri, 13 Jul 2012 17:51:19 GMT]]></title><description><![CDATA[<p>irgendwas schrieb:</p>
<blockquote>
<p>Ich hab mir &quot;c++ in 21 Tagen&quot; doch nicht gekauft, das gibts umsonst im Internet.<br />
&quot;Der C++ Programmierer&quot; hört sich noch ganz gut an.</p>
</blockquote>
<p>Legal?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2232537</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2232537</guid><dc:creator><![CDATA[IrgendeinName]]></dc:creator><pubDate>Fri, 13 Jul 2012 17:51:19 GMT</pubDate></item><item><title><![CDATA[Reply to Aufeinander zugreifende Klassen on Fri, 13 Jul 2012 17:51:52 GMT]]></title><description><![CDATA[<p>IrgendeinName schrieb:</p>
<blockquote>
<p>irgendwas schrieb:</p>
<blockquote>
<p>Ich hab mir &quot;c++ in 21 Tagen&quot; doch nicht gekauft, das gibts umsonst im Internet.<br />
&quot;Der C++ Programmierer&quot; hört sich noch ganz gut an.</p>
</blockquote>
<p>Legal?</p>
</blockquote>
<p>Hmm? Ist doch egal. Wir leben in einem Zeitalter in dem wir sogar unbewusst viel illegales tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2232538</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2232538</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 13 Jul 2012 17:51:52 GMT</pubDate></item><item><title><![CDATA[Reply to Aufeinander zugreifende Klassen on Sat, 14 Jul 2012 11:44:53 GMT]]></title><description><![CDATA[<p>Nee, nee legal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2232709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2232709</guid><dc:creator><![CDATA[irgendwas]]></dc:creator><pubDate>Sat, 14 Jul 2012 11:44:53 GMT</pubDate></item></channel></rss>