<?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[Rekursive Includes und Forwarddeklarationen]]></title><description><![CDATA[<p>Ich habe gerade bisl verständnisprobleme mit dem Linken bzw. den #include Angaben.</p>
<p>Mein Project besteht aus:<br />
Application.h/cpp<br />
Karusell.h/cpp<br />
createUI.h/cpp<br />
Kamera.h/cpp<br />
main.cpp</p>
<p>Folgendermaßen sind die Beziehungen: ( A -&gt; B bedeutet A includiert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="B)"
      alt="😎"
    /></p>
<p>main.cpp -&gt; Application.h<br />
Application -&gt; Kamera.h<br />
Application -&gt; Karusell.h (Karusell ist Teil der Application)<br />
Karusell -&gt; Application.h (Karusell bekommt im Constructor die Application übergeben. Quasi ein Pointer auf den Vater)</p>
<p>Wie man sieht hat man da ne astreine rekursive Abhängigkeit.</p>
<p>Ohne irgendwelche Forward-Deklarationen meckert er in Karusell.h an, dass man Application so nicht definieren dürfte. Is natürlich eine missinterpretation die daher kommt, dass ich Application als Typ für eine Membervariable benutze, er Application aber noch nicht kennt.</p>
<p>Meine Idee war eine der Beiden Klassen per forward-Definition anzugeben. Leider funktioniert beides nicht.<br />
Wenn ich in Karusell die Application &quot;vormerke&quot; kommt:</p>
<pre><code>../src/Application.h:16: error: ISO C++ forbids declaration of `Karusell' with no type
</code></pre>
<p>Wenn ich in Application das Karusell &quot;vormerke&quot; kommt:</p>
<pre><code>../src/Karusell.h:25: error: ISO C++ forbids declaration of `Application' with no type
</code></pre>
<p>Wenn ich beide &quot;vormerke&quot; gehts.<br />
Aber irgendwie hab ich Bauchschmerzen, denn ich kann mir nicht vorstellen, dass man eine gegenseitige Aggregation nicht anders lösen kann.</p>
<p>Wieso das Ganze überhaupt? Nun in Karusell.cpp muss ich einige Flags der Application auslesen, damit ich weiß wie Karusell darzustellen ist. Application ist der Chef. Neben dem Karusell verwaltet diese Klasse auch noch einen GUI-Manager, welcher die Nutzereingaben in den Flags der Application speichert. An die muss ich jetzt von Karusell aus rankommen.</p>
<p>Ziel war eigentlich eine schön übersichtliche Projektstruktur zu bauen, aber so langsam bekomm ich wieder das Gefühl nen großen Flickenteppich zu bauen... :?</p>
<p>Meine Frage wäre nun: Wie würdet ihr das Problem angehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/136675/rekursive-includes-und-forwarddeklarationen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 14:01:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/136675.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 12 Feb 2006 13:19:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Rekursive Includes und Forwarddeklarationen on Sun, 12 Feb 2006 13:19:38 GMT]]></title><description><![CDATA[<p>Ich habe gerade bisl verständnisprobleme mit dem Linken bzw. den #include Angaben.</p>
<p>Mein Project besteht aus:<br />
Application.h/cpp<br />
Karusell.h/cpp<br />
createUI.h/cpp<br />
Kamera.h/cpp<br />
main.cpp</p>
<p>Folgendermaßen sind die Beziehungen: ( A -&gt; B bedeutet A includiert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="B)"
      alt="😎"
    /></p>
<p>main.cpp -&gt; Application.h<br />
Application -&gt; Kamera.h<br />
Application -&gt; Karusell.h (Karusell ist Teil der Application)<br />
Karusell -&gt; Application.h (Karusell bekommt im Constructor die Application übergeben. Quasi ein Pointer auf den Vater)</p>
<p>Wie man sieht hat man da ne astreine rekursive Abhängigkeit.</p>
<p>Ohne irgendwelche Forward-Deklarationen meckert er in Karusell.h an, dass man Application so nicht definieren dürfte. Is natürlich eine missinterpretation die daher kommt, dass ich Application als Typ für eine Membervariable benutze, er Application aber noch nicht kennt.</p>
<p>Meine Idee war eine der Beiden Klassen per forward-Definition anzugeben. Leider funktioniert beides nicht.<br />
Wenn ich in Karusell die Application &quot;vormerke&quot; kommt:</p>
<pre><code>../src/Application.h:16: error: ISO C++ forbids declaration of `Karusell' with no type
</code></pre>
<p>Wenn ich in Application das Karusell &quot;vormerke&quot; kommt:</p>
<pre><code>../src/Karusell.h:25: error: ISO C++ forbids declaration of `Application' with no type
</code></pre>
<p>Wenn ich beide &quot;vormerke&quot; gehts.<br />
Aber irgendwie hab ich Bauchschmerzen, denn ich kann mir nicht vorstellen, dass man eine gegenseitige Aggregation nicht anders lösen kann.</p>
<p>Wieso das Ganze überhaupt? Nun in Karusell.cpp muss ich einige Flags der Application auslesen, damit ich weiß wie Karusell darzustellen ist. Application ist der Chef. Neben dem Karusell verwaltet diese Klasse auch noch einen GUI-Manager, welcher die Nutzereingaben in den Flags der Application speichert. An die muss ich jetzt von Karusell aus rankommen.</p>
<p>Ziel war eigentlich eine schön übersichtliche Projektstruktur zu bauen, aber so langsam bekomm ich wieder das Gefühl nen großen Flickenteppich zu bauen... :?</p>
<p>Meine Frage wäre nun: Wie würdet ihr das Problem angehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/992232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/992232</guid><dc:creator><![CDATA[Anfänger06]]></dc:creator><pubDate>Sun, 12 Feb 2006 13:19:38 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursive Includes und Forwarddeklarationen on Sun, 12 Feb 2006 15:09:38 GMT]]></title><description><![CDATA[<p>Extern Deklaration &quot;class application&quot; in das Karusell, in der Klasse nur mit Pointern zu application arbeiten und in der .cpp die application.h inkludieren.<br />
Alles klar <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/992342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/992342</guid><dc:creator><![CDATA[Headhunter]]></dc:creator><pubDate>Sun, 12 Feb 2006 15:09:38 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursive Includes und Forwarddeklarationen on Sun, 12 Feb 2006 16:59:30 GMT]]></title><description><![CDATA[<p>Öhm..hui...extern declaration?</p>
<p>Könntest du das etwas genauer erklären?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/992425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/992425</guid><dc:creator><![CDATA[Anfänger06]]></dc:creator><pubDate>Sun, 12 Feb 2006 16:59:30 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursive Includes und Forwarddeklarationen on Sun, 12 Feb 2006 23:59:12 GMT]]></title><description><![CDATA[<p>Möchte nochmal nachfragen wie das jetzt gemeint war.</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/992752</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/992752</guid><dc:creator><![CDATA[Anfänger06]]></dc:creator><pubDate>Sun, 12 Feb 2006 23:59:12 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursive Includes und Forwarddeklarationen on Mon, 13 Feb 2006 07:16:43 GMT]]></title><description><![CDATA[<p>Wenn sich zwei Klassen gegenseitig einbinden sollen, geht das sowieso nur über Pointer oder Referenzen, andernfalls würdest du ein unendlich großes Objekt (Karussel enthält Application enthält Karussel ...) erhalten. Und bei Pointern/Referenzen reicht auch eine Forward-Deklaration:</p>
<pre><code class="language-cpp">//Karussel.h
class Application;

class Karussel
{
public:
  Karussel(Application* app, string name);
  ...
private:
  Application* my_app;
};

//Application.h
#include &quot;Karussel.h&quot;
#include &lt;vector&gt;

class Application
{
public:
  Application();
  void add_karrussel(string name);
private:
  std::vector&lt;Karussel&gt; my_jahrmarkt;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/992794</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/992794</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 13 Feb 2006 07:16:43 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursive Includes und Forwarddeklarationen on Mon, 13 Feb 2006 07:19:52 GMT]]></title><description><![CDATA[<p>Headhunter schrieb:</p>
<blockquote>
<p>Extern Deklaration &quot;class application&quot; in das Karusell, in der Klasse nur mit Pointern zu application arbeiten und in der .cpp die application.h inkludieren.<br />
Alles klar <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>
</blockquote>
<p>Wie kommst du auf extern? Eine simple forward declaration reicht da.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/11928">@Anfänger06</a></p>
<p>Mach das #include &quot;application.h&quot; aus &quot;karusell.h&quot; raus und pack es in karusell.cpp<br />
Und dafür schreibst du in karusell.h vor der klasse Karusell folgende Zeile:</p>
<pre><code class="language-cpp">class Application
</code></pre>
<p>Sollte dann ungefähr so aussehen:</p>
<pre><code class="language-cpp">class Application;
class Karusell
{
public:
   Karusell( Application * parent );
...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/992796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/992796</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Mon, 13 Feb 2006 07:19:52 GMT</pubDate></item></channel></rss>