<?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[Header include Kreisschluss.]]></title><description><![CDATA[<p>Hi!</p>
<p>Wenn ich eine Struktur machen möchte in der zwei Klassen gegenseitig funktionen von sich ausführen können bekomme ich ja Probleme mit den header Kreisincludes.<br />
Also weil Klasse A, den Header von Klasse B includen muss um ein Objekt von B erstellen zu können, und Klasse B den header von Klasse A includen muss damit es public/protected erben kann.</p>
<p>Eine Möglichkeit das zu umgehen ist z.B. ein Observer. Aber irgendwie finde ich das ziemlich nervig. Gibt es denn keine bessere Lösung?!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/325118/header-include-kreisschluss</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Jul 2026 19:56:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/325118.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 15 Apr 2014 10:56:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Header include Kreisschluss. on Tue, 15 Apr 2014 10:56:46 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Wenn ich eine Struktur machen möchte in der zwei Klassen gegenseitig funktionen von sich ausführen können bekomme ich ja Probleme mit den header Kreisincludes.<br />
Also weil Klasse A, den Header von Klasse B includen muss um ein Objekt von B erstellen zu können, und Klasse B den header von Klasse A includen muss damit es public/protected erben kann.</p>
<p>Eine Möglichkeit das zu umgehen ist z.B. ein Observer. Aber irgendwie finde ich das ziemlich nervig. Gibt es denn keine bessere Lösung?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2394689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2394689</guid><dc:creator><![CDATA[cl90]]></dc:creator><pubDate>Tue, 15 Apr 2014 10:56:46 GMT</pubDate></item><item><title><![CDATA[Reply to Header include Kreisschluss. on Tue, 15 Apr 2014 10:58:53 GMT]]></title><description><![CDATA[<p>Forward Declaration</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2394690</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2394690</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Tue, 15 Apr 2014 10:58:53 GMT</pubDate></item><item><title><![CDATA[Reply to Header include Kreisschluss. on Tue, 15 Apr 2014 11:13:43 GMT]]></title><description><![CDATA[<p>Der Trick ist, dass du die vollständige Definition der einen Klasse nur in den Funktionsdefinitionen, also im Source der jeweils anderen brauchst. Sprich: Im Header von A brauchst du nur die Deklaration, den Namen von B, aber nicht dessen vollständige Definition. Die ist in B.h. Und in B.h braucht die Klassendefinition von B nur den Namen von A, nicht aber A's Definition.</p>
<p>In den Source-Dateien beider Klassen bindest du dann ganz entspannt beide Header ein, (B.h und A.h).<br />
Und um von einer Klasse nur den Namen bekannt zumachen, machst du eine Vorwärtsdeklaration:</p>
<pre><code>class B;
// bzw.
class A;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2394692</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2394692</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Tue, 15 Apr 2014 11:13:43 GMT</pubDate></item><item><title><![CDATA[Reply to Header include Kreisschluss. on Tue, 15 Apr 2014 11:14:30 GMT]]></title><description><![CDATA[<p>cl90 schrieb:</p>
<blockquote>
<p>Wenn ich eine Struktur machen möchte in der zwei Klassen gegenseitig funktionen von sich ausführen können bekomme ich ja Probleme mit den header Kreisincludes.</p>
</blockquote>
<p>Nicht notwendigerweise, nein.</p>
<p>cl90 schrieb:</p>
<blockquote>
<p>Also weil Klasse A, den Header von Klasse B includen muss um ein Objekt von B erstellen zu können, und Klasse B den header von Klasse A includen muss damit es public/protected erben kann.</p>
</blockquote>
<p>Wie meinst Du das genau? Zeig doch mal.</p>
<p>cl90 schrieb:</p>
<blockquote>
<p>Eine Möglichkeit das zu umgehen ist z.B. ein Observer. Aber irgendwie finde ich das ziemlich nervig. Gibt es denn keine bessere Lösung?!</p>
</blockquote>
<p>Wahrscheinlich, ja.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2394693</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2394693</guid><dc:creator><![CDATA[kkaw]]></dc:creator><pubDate>Tue, 15 Apr 2014 11:14:30 GMT</pubDate></item><item><title><![CDATA[Reply to Header include Kreisschluss. on Tue, 22 Apr 2014 10:43:50 GMT]]></title><description><![CDATA[<p>ok aber dann gehen z.b. die autocomplete funktionen nicht mehr. Wär nicht ganz so tragisch aber vlt gehts noch besser.</p>
<p>Also das hier ist ein simples Beispiel von dem was ich machen möchte.<br />
Die Klasse Bla hat ein Objekt von DelayHandle und führt Funktionen von DelayHandle aus.<br />
In dem Fall das ein aktiver Thread von Bla aus Funktionen von DelayHandle ausführt, kann ich durch return oder call bei Ref, alles an Informationen aus aufgerufenen Funktionen bekommen die ich brauche.<br />
Wenn ich im DelayHandle aber einen Thread starte, der dann nach Zeit/WhatEverEvent Bla bescheid gibt, komme ich an diese Stelle.<br />
- Entweder ich ändere eine Variable die von Bla regelmäßig geprüft wird,<br />
- ich sende ein Notify über einen Observer,<br />
- oder ich bringe DelayHandle bei direkt auf die Funktionen von Bla zuzugreifen. So wie im folgendem Code angedeutet:<br />
Aber das ist wie gesagt die frage... Wie baut man das ohne beide Klassen im selben header zu haben...</p>
<pre><code>// header 1
#include &quot;bla.h&quot; class DelayHandle : public bla {
public:
	DelayHandle();
	~DelayHandle(){};

	_ErrType							tryDelayedUpdate() {
		//starte thread.. etc
		// mach dies..
		// und das...
		recall();
	}

};

//header 2 
#include &quot;DelayHandle.h&quot; // kreisschluss
class bla {
public:
	bla();
	~bla(){};

	void		recall();

	void		request() {
		m_delayHandle.tryDelayedUpdate();
	};

private
	DelayHandle		m_delayHandle;

};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2395797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395797</guid><dc:creator><![CDATA[cl90]]></dc:creator><pubDate>Tue, 22 Apr 2014 10:43:50 GMT</pubDate></item><item><title><![CDATA[Reply to Header include Kreisschluss. on Tue, 22 Apr 2014 11:12:04 GMT]]></title><description><![CDATA[<p>Das kann nicht funktionieren.<br />
bla hat einen DelayHandle-Member -&gt; Jedes bla enthält ein DelayHandle.<br />
DelayHandle ist von bla abgeleitet -&gt; Jedes DelayHandle enthält ein bla.<br />
Wo soll das enden?</p>
<p>Falls das nur ein Vereinfachungsfehler war (es ist nicht dasselbe bla), hilft es dir vermutlich schon, die Methoden nicht im Header zu definieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395803</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395803</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 22 Apr 2014 11:12:04 GMT</pubDate></item><item><title><![CDATA[Reply to Header include Kreisschluss. on Tue, 22 Apr 2014 12:43:44 GMT]]></title><description><![CDATA[<p>ja genau, das meine ich ja. Deshalb nehme ich da bisher immer Observer.<br />
Es kam nur die Frage auf, ob es auch anders geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395823</guid><dc:creator><![CDATA[cl90]]></dc:creator><pubDate>Tue, 22 Apr 2014 12:43:44 GMT</pubDate></item><item><title><![CDATA[Reply to Header include Kreisschluss. on Tue, 22 Apr 2014 13:00:28 GMT]]></title><description><![CDATA[<p>Nur nochmal zur Klarstellung: Du hast kein Problem mit Header-Include-Kreisen, du hast ein Problem mit deinem Klassendesign, das zwangsweise zu Header-Include-Kreisen führt.</p>
<p>cl90 schrieb:</p>
<blockquote>
<p>Es kam nur die Frage auf, ob es auch anders geht.</p>
</blockquote>
<p>Na sicher. Entweder erbt DelayHandle nicht von bla, oder bla enthält kein DelayHandle als Value-Member. Was davon sinnvoll ist, kann man nicht sagen, ohne die Klassen genauer zu kennen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395824</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 22 Apr 2014 13:00:28 GMT</pubDate></item><item><title><![CDATA[Reply to Header include Kreisschluss. on Tue, 22 Apr 2014 14:24:54 GMT]]></title><description><![CDATA[<p>Wie genau meinst du das?</p>
<p>Es geht darum, dass sowohl: (Obj a, b)<br />
a -&gt; Funktionen von b ausführen kann, als auch<br />
b -&gt; Funktionen von a ausführen kann.</p>
<p>Wäre das dann noch gewährleistet?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395844</guid><dc:creator><![CDATA[cl90]]></dc:creator><pubDate>Tue, 22 Apr 2014 14:24:54 GMT</pubDate></item><item><title><![CDATA[Reply to Header include Kreisschluss. on Tue, 22 Apr 2014 17:08:56 GMT]]></title><description><![CDATA[<p>Ich blick hier schon von Anfang an nicht durch. Wieso müssen die überhaupt von einander erben?<br />
Und wieso erzeugt der parent Objekte vom Child?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395865</guid><dc:creator><![CDATA[Sqwan]]></dc:creator><pubDate>Tue, 22 Apr 2014 17:08:56 GMT</pubDate></item><item><title><![CDATA[Reply to Header include Kreisschluss. on Wed, 23 Apr 2014 05:43:13 GMT]]></title><description><![CDATA[<p>cl90 schrieb:</p>
<blockquote>
<p>Wäre das dann noch gewährleistet?</p>
</blockquote>
<p>Ist dir klar, dass das bla-Objekt, dessen recall-Methode du in DelayHandle::tryDelayedUpdate aufrufst, nicht dasselbe ist, das in seiner request-Methode tryDelayedUpdate aufgerufen hat?</p>
<p>Es geht nicht darum, dass du <em>ein</em> Objekt des passenden Typs zum Aufrufen hast. Du musst das <em>richtige</em> Objekt haben.</p>
<p>Warum gibst du tryDelayedUpdate nicht einfach eine Referenz auf das aufrufende bla mit? Dann nimmst du die sinnlose Vererbung raus, und schon reicht dir in DelayHandle.h eine Forward Declaration von bla.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395917</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395917</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Wed, 23 Apr 2014 05:43:13 GMT</pubDate></item><item><title><![CDATA[Reply to Header include Kreisschluss. on Wed, 23 Apr 2014 06:44:53 GMT]]></title><description><![CDATA[<p>[quote=&quot;MFK]Warum gibst du tryDelayedUpdate nicht einfach eine Referenz auf das aufrufende bla mit? Dann nimmst du die sinnlose Vererbung raus, und schon reicht dir in DelayHandle.h eine Forward Declaration von bla.[/quote]<br />
Dann sind wir immer noch beim Header Kreisschluss...</p>
<p>Bla hat ein Objekt DelayHandle, braucht also den Header von DelayHandle.<br />
DelayHandle bekommt eine Referenz von Bla. Braucht also den Header von Bla um Bla zu kennen. -&gt; Kreisschluss.<br />
Dafür war jetzt hier die Lösung aufgekommen das Objekt Bla oder DelayHandle in Form von einem Namen bekannt zu machen, aber nicht den header zu laden.</p>
<p>Es hat mich nur interessiert ob es noch weitere Möglichkeiten gibt, zusätlich zu der die ich kenne.</p>
<p>Und wozu diese Vernetzung wichtig ist:<br />
Es gibt keine andere Sinvolle Lösung wenn ein eben erstellter Thread einer Klasse einer anderen Klasse bescheidgeben will.</p>
<p>Bla -&gt; meldet sich als Observer bei DelayKlasse an.<br />
Bla -&gt; Request an Delay Klasse<br />
Delay Klasse -&gt; Starte Thread mit Zeitpunkt.<br />
Bla macht inzwischen irgendetwas anderes<br />
Thread -&gt; notify über den Observer an Bla.<br />
Thread führt im Notify aufgelistete Funktion <strong>sofort</strong> aus ohne das Bla ein gesetztes Flag irgendwo abfragt und dann erst reagiert.</p>
<p>Man könnt den Thread natürlich in der Klasse des Zielaufrufes erstellen, aber das dann kann ich auch gleich auf OOP und Ordnung verzichten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395926</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395926</guid><dc:creator><![CDATA[cl90]]></dc:creator><pubDate>Wed, 23 Apr 2014 06:44:53 GMT</pubDate></item><item><title><![CDATA[Reply to Header include Kreisschluss. on Wed, 23 Apr 2014 07:10:48 GMT]]></title><description><![CDATA[<p>cl90 schrieb:</p>
<blockquote>
<p>DelayHandle bekommt eine Referenz von Bla. Braucht also den Header von Bla um Bla zu kennen. -&gt; Kreisschluss.</p>
</blockquote>
<p>Nein. Für einen Referenz-Parameter in einer Methodendeklaration reicht eine Forward Declaration. Die Definition der Methode braucht natürlich den Header, aber das kannst du in DelayHandle.cpp machen.</p>
<p>cl90 schrieb:</p>
<blockquote>
<p>Man könnt den Thread natürlich in der Klasse des Zielaufrufes erstellen, aber das dann kann ich auch gleich auf OOP und Ordnung verzichten.</p>
</blockquote>
<p>Ganz ehrlich: Ich glaube nicht, dass du OOP verstanden hast. Du kennst anscheinend den Unterschied zwischen Instanz und Klasse nicht, und hast meiner Meinung nach immer noch nicht verstanden, warum deine &quot;Lösung&quot; nicht funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395927</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395927</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Wed, 23 Apr 2014 07:10:48 GMT</pubDate></item><item><title><![CDATA[Reply to Header include Kreisschluss. on Wed, 23 Apr 2014 07:41:26 GMT]]></title><description><![CDATA[<p>Es war nie meine Lösung.<br />
Es war eine Frage ob man etwa in dieser, bzw ähnlicher Form bauen kann um einen Observer überflüssig zu machen.</p>
<p>Und das wurde hier jetzt wohl schon mehrfach beantwortet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395932</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395932</guid><dc:creator><![CDATA[cl90]]></dc:creator><pubDate>Wed, 23 Apr 2014 07:41:26 GMT</pubDate></item></channel></rss>