<?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[Gegenseitiger Aufruf von Funktion in zwei Klassen]]></title><description><![CDATA[<p>Hi,</p>
<p>ich stehe wieder einmal vor einem Problem.<br />
Zwei Klassen müssen auf Funktionen der jeweils anderen Klasse zugreifen.<br />
Jede Klassen hat einen Pointer auf die andere Klasse von einer dritten Klasse bekommen.</p>
<p>Sieht also so aus:</p>
<p>Class a:<br />
- Pointer class b1.<br />
- Pointer class b2.</p>
<p>Class b1:<br />
- Pointer class b2. (von a bekommen)<br />
- Funktion x1. //ruft y2 auf<br />
- Funktion x2.</p>
<p>Class b2:<br />
- Pointer class b1. (von a bekommen)<br />
- Funktion y1. //ruft x2 auf<br />
- Funktion y2.</p>
<p>Wie es nunmal ist haben die Klassen b1 und b2 eigene header.</p>
<p>Nun ist die Frage, wie ich die header von b1 und b2 gegeneinander verlinke. An sich ist das ja nicht möglich, da man sonst einen unendlichen rekursiven linking-Prozess hat.<br />
Gibt es dafür eine Lösung?<br />
Eine Helferklasse c für die Kommunikation kann ich ja nicht einsetzen. Die müsste ja wieder b1 und b2 inkludieren und b1 und b2 eben wieder c <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>Vererbung würde ich äußerst ungern einsetzen, da b1 und b2 komplett unterschiedliche Aufgaben und Inhalte haben.<br />
Und ja, ich weiß dass das ein ständiges Thema ist, bin aber noch nicht auf eine anständige Lösung gestoßen.</p>
<p>Viele Grüße<br />
Cherup</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/330542/gegenseitiger-aufruf-von-funktion-in-zwei-klassen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Jul 2026 04:56:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/330542.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 15 Jan 2015 10:47:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Gegenseitiger Aufruf von Funktion in zwei Klassen on Thu, 15 Jan 2015 10:47:21 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich stehe wieder einmal vor einem Problem.<br />
Zwei Klassen müssen auf Funktionen der jeweils anderen Klasse zugreifen.<br />
Jede Klassen hat einen Pointer auf die andere Klasse von einer dritten Klasse bekommen.</p>
<p>Sieht also so aus:</p>
<p>Class a:<br />
- Pointer class b1.<br />
- Pointer class b2.</p>
<p>Class b1:<br />
- Pointer class b2. (von a bekommen)<br />
- Funktion x1. //ruft y2 auf<br />
- Funktion x2.</p>
<p>Class b2:<br />
- Pointer class b1. (von a bekommen)<br />
- Funktion y1. //ruft x2 auf<br />
- Funktion y2.</p>
<p>Wie es nunmal ist haben die Klassen b1 und b2 eigene header.</p>
<p>Nun ist die Frage, wie ich die header von b1 und b2 gegeneinander verlinke. An sich ist das ja nicht möglich, da man sonst einen unendlichen rekursiven linking-Prozess hat.<br />
Gibt es dafür eine Lösung?<br />
Eine Helferklasse c für die Kommunikation kann ich ja nicht einsetzen. Die müsste ja wieder b1 und b2 inkludieren und b1 und b2 eben wieder c <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>Vererbung würde ich äußerst ungern einsetzen, da b1 und b2 komplett unterschiedliche Aufgaben und Inhalte haben.<br />
Und ja, ich weiß dass das ein ständiges Thema ist, bin aber noch nicht auf eine anständige Lösung gestoßen.</p>
<p>Viele Grüße<br />
Cherup</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437691</guid><dc:creator><![CDATA[Cherup]]></dc:creator><pubDate>Thu, 15 Jan 2015 10:47:21 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitiger Aufruf von Funktion in zwei Klassen on Thu, 15 Jan 2015 11:04:33 GMT]]></title><description><![CDATA[<p>Dein Stichwort für Google heißt &quot;Forward Declaration&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437693</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437693</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Thu, 15 Jan 2015 11:04:33 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitiger Aufruf von Funktion in zwei Klassen on Thu, 15 Jan 2015 12:55:43 GMT]]></title><description><![CDATA[<p>Danke, das hilft mir weiter <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2437714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437714</guid><dc:creator><![CDATA[Cherup]]></dc:creator><pubDate>Thu, 15 Jan 2015 12:55:43 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitiger Aufruf von Funktion in zwei Klassen on Thu, 15 Jan 2015 13:42:50 GMT]]></title><description><![CDATA[<p>Also irgendwie bin ich wohl zu blöd, um das zu nutzen.<br />
Ich hab jetzt in den Klassen b1 und b2 vor der eigentlichen Klasse &quot;class b2;&quot; in b1 und &quot;class b1;&quot; in b2 eingefügt.<br />
Jetzt sagt mir der Compiler: &quot;Fehler: Vorwärtsdeklaration von struct b1&quot;. Zu b2 ist er wohl gar nicht gekommen...</p>
<p>Und ist es richtig, das er eine Klasse als struct sieht?</p>
<p>Was mache ich falsch? (Blöde Frage aber nunja...)</p>
<p>Viele Grüße<br />
Cherup</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437729</guid><dc:creator><![CDATA[Cherup]]></dc:creator><pubDate>Thu, 15 Jan 2015 13:42:50 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitiger Aufruf von Funktion in zwei Klassen on Thu, 15 Jan 2015 13:51:57 GMT]]></title><description><![CDATA[<p>Cherup schrieb:</p>
<blockquote>
<p>Was mache ich falsch? (Blöde Frage aber nunja...)</p>
</blockquote>
<p>Du zeigst nur Prosa statt Code.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437730</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437730</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Thu, 15 Jan 2015 13:51:57 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitiger Aufruf von Funktion in zwei Klassen on Thu, 15 Jan 2015 14:15:03 GMT]]></title><description><![CDATA[<p>Da hast du recht, wollte es vereinfachen. War wohl in Fall übertrieben.<br />
Hier also der Code dazu:</p>
<p>a.h:</p>
<pre><code>#include &quot;b1.h&quot;
#include &quot;b2.h&quot;

class a{
private:
   b1* myB1;
   b2* myB2;

public:
   a()
};
</code></pre>
<p>a.cpp:</p>
<pre><code>#include &quot;a.h&quot;

a::a(){
   myB1 = new b1;
   myB2 = new b2;
   myB1-&gt;setB2Pointer(myB2);
   myB2-&gt;setB1Pointer(myB1);
}
</code></pre>
<p>b1.h:</p>
<pre><code>class b2;

class b1{
private:
   b2* myB2Pointer;
public:
   b1();
   void setB2Pointer(b2* p);
   void funcX1();
   int funcX2();
};
</code></pre>
<p>b1.cpp:</p>
<pre><code>#include &quot;b1.h&quot;

b1::b1() {}
void b1::setB2Pointer(b2* p){
   myB2Pointer = p;
}

void b1::funcX1(){
   int i = myB2Pointer-&gt;funcY2();
}

int b1::funcX2(){
   return 1;
}
</code></pre>
<p>b2.h:</p>
<pre><code>class b1;

class b2{
private:
   b1* myB1Pointer;
public:
   b2();
   void setB2Pointer(b1* p);
   void funcY1();
   int funcY2();
};
</code></pre>
<p>b2.cpp:</p>
<pre><code>#include &quot;b2.h&quot;

b2::b2() {}
void b1::setB2Pointer(b1* p){
   myB1Pointer = p;
}

void b2::funcY1(){
   int i = myB1Pointer-&gt;funcX2();
}

int b2::funcY2(){
   return 2;
}
</code></pre>
<p>Hab das jetzt mal so runtergeschrieben, um bei der Namensgebung zu bleiben, stimmt aber an sich mit den Klassen bei mir überein. Die sind einfach sehr umfangreich und würden wohl den Rahmen (und vor allem die Übersichtlichkeit) sprengen <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>Eventuelle Schreibfehler dabei bitte ich zu entschuldigen.</p>
<p>Viele Grüße<br />
Cherup</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437732</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437732</guid><dc:creator><![CDATA[Cherup]]></dc:creator><pubDate>Thu, 15 Jan 2015 14:15:03 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitiger Aufruf von Funktion in zwei Klassen on Thu, 15 Jan 2015 14:31:32 GMT]]></title><description><![CDATA[<p>Hast du denn auch ausprobiert, ob das &quot;so runtergeschriebene&quot; den Fehler reproduziert?</p>
<p>In den cpp müsste jedenfalls b1 und b2 eingebunden werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437734</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Thu, 15 Jan 2015 14:31:32 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitiger Aufruf von Funktion in zwei Klassen on Thu, 15 Jan 2015 14:38:08 GMT]]></title><description><![CDATA[<p>Ne, hat er natürlich nicht. Semikolons fehlen, Flüchtigkeitsfehler wie '1' statt '2' ... boah</p>
<p><code>a.h</code></p>
<pre><code class="language-cpp">#ifndef A_H_INCLUDED
#define A_H_INCLUDED

class b1;
class b2;

class a
{
	private:
		b1* myB1;
		b2* myB2;
	public:
		a();
};

#endif /* A_H_INCLUDED */
</code></pre>
<p><code>a.cpp</code></p>
<pre><code class="language-cpp">#include &quot;a.h&quot;

#include &quot;b1.h&quot;
#include &quot;b2.h&quot;

a::a()
{
   myB1 = new b1;
   myB2 = new b2;
   myB1-&gt;setB2Pointer(myB2);
   myB2-&gt;setB1Pointer(myB1);
}
</code></pre>
<p><code>b1.h</code></p>
<pre><code class="language-cpp">#ifndef B1_H_INCLUDED
#define B1_H_INCLUDED

class b2;

class b1
{
	private:
		b2* myB2Pointer;
	public:
		b1();
		void setB2Pointer(b2* p);
		void funcX1();
		int funcX2();
};

#endif /* B1_H_INCLUDED */
</code></pre>
<p><code>b1.cpp</code></p>
<pre><code class="language-cpp">#include &quot;b1.h&quot;
#include &quot;b2.h&quot;

b1::b1() {}
void b1::setB2Pointer(b2* p) { myB2Pointer = p; }
void b1::funcX1() { int i = myB2Pointer-&gt;funcY2(); }
int b1::funcX2() { return 1; }
</code></pre>
<p><code>b2.h</code></p>
<pre><code class="language-cpp">#ifndef B2_H_INCLUDED
#define B2_H_INCLUDED

class b1;

class b2
{
	private:
		b1* myB1Pointer;
	public:
		b2();
		void setB1Pointer(b1* p);
		void funcY1();
		int funcY2();
};

#endif /* B2_H_INCLUDED */
</code></pre>
<p><code>b2.cpp</code></p>
<pre><code class="language-cpp">#include &quot;b2.h&quot;
#include &quot;b1.h&quot;

b2::b2() {}
void b2::setB1Pointer(b1* p) { myB1Pointer = p; }
void b2::funcY1() { int i = myB1Pointer-&gt;funcX2(); }
int b2::funcY2() { return 2; }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2437735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437735</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Thu, 15 Jan 2015 14:38:08 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitiger Aufruf von Funktion in zwei Klassen on Thu, 15 Jan 2015 15:11:05 GMT]]></title><description><![CDATA[<p>Ok, danke für eure Hilfe.<br />
Wie gesagt, es war ein runtergeschriebenes Beispiel, daher das fehlende Semikolon und der eine Dreher mit 1 und 2.<br />
In den wesentlichen Punkten war es aber korrekt, ich hatte die Header nicht in den CPPs eingebunden. Das hat dann die Lösung gebracht.<br />
Nun scheint es zu laufen <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>Viele Grüße<br />
Cherup</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437740</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437740</guid><dc:creator><![CDATA[Cherup]]></dc:creator><pubDate>Thu, 15 Jan 2015 15:11:05 GMT</pubDate></item></channel></rss>