<?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[gegenseitiges includieren]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich schreib im Moment an meiner Diplomarbeit und habe da ein (ich hoffe) kleines Problem bei einer C++-Geschichte.</p>
<p>Vereinfacht sieht das Problem so aus: Ich habe zwei .cpp-Dateien mit den zugehörigen .h-Dateien.</p>
<p>Erstens die finite_state_machine.cpp und diese includiert die finite_state_machine.h. Die finite_state_machine.h<br />
sieht ungefähr so aus:</p>
<p>// finite_state_machine.h<br />
#ifndef _FINITE_STATE_MACHINE_H<br />
#define _FINITE_STATE_MACHINE_H</p>
<p>#include &quot;superstate.h&quot;</p>
<p>class finite_state_machine {<br />
// .... Klassenkram...<br />
};</p>
<p>#endif /* _FINITE_STATE_MACHINE_H */</p>
<p>Dabei wird das #include &quot;superstate.h&quot; benötigt, weil ich in der Klassenimplementierung (finite_state_machine.cpp)<br />
ein Objekt der Klasse superstate instanziiere und (das ist wohl der Punkt) auf eine Methode zugreife:</p>
<p>// in einer Methode in finite_state_machine.cpp<br />
superstate* superstatepointer;<br />
superstatepointer-&gt;step();</p>
<p>Die Klasse superstate erbt unter anderem die finite_state_machine - daher das #include &quot;finite_state_machine.h&quot;.<br />
Die Klassendeklaration von superstate sieht so aus (in superstate.h):</p>
<p>// superstate.h<br />
#ifndef _SUPERSTATE_H<br />
#define _SUPERSTATE_H</p>
<p>#include &quot;finite_state_machine.h&quot;</p>
<p>class superstate : public state : public finite_state_machine {<br />
// .... Klassenkram...<br />
};</p>
<p>Nun gibts Probleme beim kompilieren, da wenn finite_state_machine.h verarbeitet wird zunächst superstate.h includiert wird.<br />
Dabei brichts dann ab, da das &quot; : public finite_state_machine &quot; aufgrund der Unbekanntheit von finite_state_machine noch nicht<br />
klappen kann. Der nun übliche Weg der Vorwärtsdeklaration von finite_state_machine in superstate.h per<br />
class finite_state_machine; funktioniert auch nicht. Es gibt dann einen Fehler &quot;finite_state_machine has incomplete type&quot;.<br />
Wenn ich die Deklarationen aus den .h's in die finite_state_machine.h zusammenpacke (zuerst für finite_state_machine und dann für superstate) und vor<br />
dem ganzen class superstate; vorwärts deklariere - dann anstatt superstate.h finite_state_machine.h in der superstate.cpp includiere geht es.</p>
<p>Das kann wohl nicht sein - gibt es da auch eine saubere Lösung !?<br />
Ich hoffe Euch nicht zu sehr verwirrt zu haben.</p>
<p>vielen Dank</p>
<p>Michael</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/118091/gegenseitiges-includieren</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 07:21:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/118091.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 15 Aug 2005 07:44:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to gegenseitiges includieren on Mon, 15 Aug 2005 07:44:35 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich schreib im Moment an meiner Diplomarbeit und habe da ein (ich hoffe) kleines Problem bei einer C++-Geschichte.</p>
<p>Vereinfacht sieht das Problem so aus: Ich habe zwei .cpp-Dateien mit den zugehörigen .h-Dateien.</p>
<p>Erstens die finite_state_machine.cpp und diese includiert die finite_state_machine.h. Die finite_state_machine.h<br />
sieht ungefähr so aus:</p>
<p>// finite_state_machine.h<br />
#ifndef _FINITE_STATE_MACHINE_H<br />
#define _FINITE_STATE_MACHINE_H</p>
<p>#include &quot;superstate.h&quot;</p>
<p>class finite_state_machine {<br />
// .... Klassenkram...<br />
};</p>
<p>#endif /* _FINITE_STATE_MACHINE_H */</p>
<p>Dabei wird das #include &quot;superstate.h&quot; benötigt, weil ich in der Klassenimplementierung (finite_state_machine.cpp)<br />
ein Objekt der Klasse superstate instanziiere und (das ist wohl der Punkt) auf eine Methode zugreife:</p>
<p>// in einer Methode in finite_state_machine.cpp<br />
superstate* superstatepointer;<br />
superstatepointer-&gt;step();</p>
<p>Die Klasse superstate erbt unter anderem die finite_state_machine - daher das #include &quot;finite_state_machine.h&quot;.<br />
Die Klassendeklaration von superstate sieht so aus (in superstate.h):</p>
<p>// superstate.h<br />
#ifndef _SUPERSTATE_H<br />
#define _SUPERSTATE_H</p>
<p>#include &quot;finite_state_machine.h&quot;</p>
<p>class superstate : public state : public finite_state_machine {<br />
// .... Klassenkram...<br />
};</p>
<p>Nun gibts Probleme beim kompilieren, da wenn finite_state_machine.h verarbeitet wird zunächst superstate.h includiert wird.<br />
Dabei brichts dann ab, da das &quot; : public finite_state_machine &quot; aufgrund der Unbekanntheit von finite_state_machine noch nicht<br />
klappen kann. Der nun übliche Weg der Vorwärtsdeklaration von finite_state_machine in superstate.h per<br />
class finite_state_machine; funktioniert auch nicht. Es gibt dann einen Fehler &quot;finite_state_machine has incomplete type&quot;.<br />
Wenn ich die Deklarationen aus den .h's in die finite_state_machine.h zusammenpacke (zuerst für finite_state_machine und dann für superstate) und vor<br />
dem ganzen class superstate; vorwärts deklariere - dann anstatt superstate.h finite_state_machine.h in der superstate.cpp includiere geht es.</p>
<p>Das kann wohl nicht sein - gibt es da auch eine saubere Lösung !?<br />
Ich hoffe Euch nicht zu sehr verwirrt zu haben.</p>
<p>vielen Dank</p>
<p>Michael</p>
]]></description><link>https://www.c-plusplus.net/forum/post/852342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/852342</guid><dc:creator><![CDATA[michaelproto]]></dc:creator><pubDate>Mon, 15 Aug 2005 07:44:35 GMT</pubDate></item><item><title><![CDATA[Reply to gegenseitiges includieren on Mon, 15 Aug 2005 07:51:12 GMT]]></title><description><![CDATA[<blockquote>
<p>Dabei wird das #include &quot;superstate.h&quot; benötigt, weil ich in der Klassenimplementierung (finite_state_machine.cpp)<br />
ein Objekt der Klasse superstate instanziiere und (das ist wohl der Punkt) auf eine Methode zugreife:</p>
<pre><code class="language-cpp">// in einer Methode in finite_state_machine.cpp
superstate* superstatepointer;
superstatepointer-&gt;step();
</code></pre>
</blockquote>
<p>Hier liegt der Schluessel zu deinem Problem. Nutze in finite_state_machine einen<br />
Zeiger auf ¨superstate¨ und mache eine Vorwaertsdeklaration von ¨superstate¨ in<br />
finite_state_machine. Die include-Anweisung ¨superstate.h¨ entfernst du.</p>
<p>Jetzt sollte es funktionieren.</p>
<blockquote>
<p>Ich hoffe Euch nicht zu sehr verwirrt zu haben.</p>
</blockquote>
<p>Informatiker oder Mathematiker? Dann ist es dein Job, andere zu verwirren <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>mfg<br />
v R</p>
]]></description><link>https://www.c-plusplus.net/forum/post/852346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/852346</guid><dc:creator><![CDATA[virtuell Realisticer]]></dc:creator><pubDate>Mon, 15 Aug 2005 07:51:12 GMT</pubDate></item><item><title><![CDATA[Reply to gegenseitiges includieren on Mon, 15 Aug 2005 07:53:17 GMT]]></title><description><![CDATA[<p>Unter dem Stichwort forward-Declaration (class x;) solltest du das passende<br />
finden. <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/852347</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/852347</guid><dc:creator><![CDATA[Redhead]]></dc:creator><pubDate>Mon, 15 Aug 2005 07:53:17 GMT</pubDate></item><item><title><![CDATA[Reply to gegenseitiges includieren on Mon, 15 Aug 2005 10:03:55 GMT]]></title><description><![CDATA[<p>vielen Dank für Eure Antworten.</p>
<p>@virtuell Realisticer:<br />
Den Zeiger auf ¨superstate¨ benutze ich mit</p>
<p>// in einer Methode in finite_state_machine.cpp<br />
superstate* superstatepointer;<br />
superstatepointer-&gt;step();</p>
<p>ja doch schon. Oder verstehe ich Dich falsch ?<br />
Nebenbei: Ich bin kein Mathematiker / Informatiker (sondern Maschinenbauer).</p>
<p>Was zu (komischerweise) auch funktioniert ist, alle Vorwärtsdeklarationen wegzulassen und normal gegenseitig includieren. Dabei jedoch das #include &quot;superstate.h&quot; in der finite_state_machine.h erst nach der Deklaration der Klasse finite_state_machine zu schreiben.</p>
<p>Vielleicht geht's besser und ich wüsst schon gern wie. So ist es aber erst einmal erträglich da die Deklarationen wieder in den .h's stehen wo sie hingehören.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/852413</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/852413</guid><dc:creator><![CDATA[michaelproto]]></dc:creator><pubDate>Mon, 15 Aug 2005 10:03:55 GMT</pubDate></item><item><title><![CDATA[Reply to gegenseitiges includieren on Mon, 15 Aug 2005 12:01:12 GMT]]></title><description><![CDATA[<p>michaelproto schrieb:</p>
<blockquote>
<p>vielen Dank für Eure Antworten.</p>
<p>@virtuell Realisticer:<br />
Den Zeiger auf ¨superstate¨ benutze ich mit</p>
<p>// in einer Methode in finite_state_machine.cpp<br />
superstate* superstatepointer;<br />
superstatepointer-&gt;step();</p>
<p>ja doch schon. Oder verstehe ich Dich falsch ?<br />
Nebenbei: Ich bin kein Mathematiker / Informatiker (sondern Maschinenbauer).</p>
<p>Was zu (komischerweise) auch funktioniert ist, alle Vorwärtsdeklarationen wegzulassen und normal gegenseitig includieren. Dabei jedoch das #include &quot;superstate.h&quot; in der finite_state_machine.h erst nach der Deklaration der Klasse finite_state_machine zu schreiben.</p>
<p>Vielleicht geht's besser und ich wüsst schon gern wie. So ist es aber erst einmal erträglich da die Deklarationen wieder in den .h's stehen wo sie hingehören.</p>
</blockquote>
<p>Ich meinte das so:</p>
<pre><code class="language-cpp">#ifndef _FINITE_STATE_MACHINE_H
#define _FINITE_STATE_MACHINE_H

class superstate;

class finite_state_machine {
// .... Klassenkram...
//irgendwo superstate* instance oder sowas
};

#endif /* _FINITE_STATE_MACHINE_H */
</code></pre>
<p>Und nun kann man das problemlos includieren:</p>
<pre><code class="language-cpp">#ifndef _SUPERSTATE_H
#define _SUPERSTATE_H

#include &quot;finite_state_machine.h&quot;

class superstate : public state : public finite_state_machine {
// .... Klassenkram...
};
</code></pre>
<p>Falls du ein superstate* nur in einer Elementfunktion von finite_state_machine<br />
benoetigst, dann musst du hier nicht mal die vorwaertsdeklaration machen,<br />
sondern &quot;superstate.h&quot; lediglich in der &quot;finite_state_machine.cpp&quot; includieren.</p>
<p>mfg<br />
v R</p>
]]></description><link>https://www.c-plusplus.net/forum/post/852495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/852495</guid><dc:creator><![CDATA[virtuell Realisticer]]></dc:creator><pubDate>Mon, 15 Aug 2005 12:01:12 GMT</pubDate></item></channel></rss>