<?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[Zyklus auflösen]]></title><description><![CDATA[<p>Hallo</p>
<p>ich habe ein kleines C++ Problem mit einer Art zyklischen Abhängigkeit. Folgendes (vereinfachtes) Beispiel beschreibt das Problem:</p>
<pre><code class="language-cpp">// A.h
#include &quot;B.h&quot;

class A {
public:
   enum Foo { ... };
   B* b;
};
</code></pre>
<pre><code class="language-cpp">// B.h
#include &quot;A.h&quot;
class B {
public:
   B(const A::Foo foo);
};
</code></pre>
<p>Ferner gibt es wie üblich eine A.cpp und B.cpp, wobei A.cpp den Header A.h und B.cpp den Header B.h inkludiert.</p>
<p>In A.h inkludiere ich B.h, da ich in A einen Zeiger auf B habe. In B.h inkludiere ich A.h, da ich den Typ A::Foo in B brauche. Nur leider kompiliert das jetzt nicht - wenn z.B. A.cpp übersetzt wird, dann wird A.h inkludiert und daraufhin B.h und dann wird der Compiler in der Klassendeklaration B auf A::Foo stoßen, wobei er allerdings A::Foo noch nicht kennt =&gt; Fehler.</p>
<p>Eigentlich braucht nur die Klasse A die Klasse B. Also eigentlich wäre es nur notwendig, dass A.h &quot;B.h&quot; inkludiert und &quot;B.h&quot; sollte _nicht_ &quot;A.h&quot; inkludieren.</p>
<p>Ich möchte gerne das enum Foo in A lassen. Wie kann man das lösen? Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/227703/zyklus-auflösen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 29 Sep 2026 20:18:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/227703.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 19 Nov 2008 02:35:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zyklus auflösen on Wed, 19 Nov 2008 02:35:06 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>ich habe ein kleines C++ Problem mit einer Art zyklischen Abhängigkeit. Folgendes (vereinfachtes) Beispiel beschreibt das Problem:</p>
<pre><code class="language-cpp">// A.h
#include &quot;B.h&quot;

class A {
public:
   enum Foo { ... };
   B* b;
};
</code></pre>
<pre><code class="language-cpp">// B.h
#include &quot;A.h&quot;
class B {
public:
   B(const A::Foo foo);
};
</code></pre>
<p>Ferner gibt es wie üblich eine A.cpp und B.cpp, wobei A.cpp den Header A.h und B.cpp den Header B.h inkludiert.</p>
<p>In A.h inkludiere ich B.h, da ich in A einen Zeiger auf B habe. In B.h inkludiere ich A.h, da ich den Typ A::Foo in B brauche. Nur leider kompiliert das jetzt nicht - wenn z.B. A.cpp übersetzt wird, dann wird A.h inkludiert und daraufhin B.h und dann wird der Compiler in der Klassendeklaration B auf A::Foo stoßen, wobei er allerdings A::Foo noch nicht kennt =&gt; Fehler.</p>
<p>Eigentlich braucht nur die Klasse A die Klasse B. Also eigentlich wäre es nur notwendig, dass A.h &quot;B.h&quot; inkludiert und &quot;B.h&quot; sollte _nicht_ &quot;A.h&quot; inkludieren.</p>
<p>Ich möchte gerne das enum Foo in A lassen. Wie kann man das lösen? Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1616887</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1616887</guid><dc:creator><![CDATA[seb80]]></dc:creator><pubDate>Wed, 19 Nov 2008 02:35:06 GMT</pubDate></item><item><title><![CDATA[Reply to Zyklus auflösen on Wed, 19 Nov 2008 03:05:24 GMT]]></title><description><![CDATA[<p>Kannst du das enum aus A nicht auslagern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1616888</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1616888</guid><dc:creator><![CDATA[Kuldren]]></dc:creator><pubDate>Wed, 19 Nov 2008 03:05:24 GMT</pubDate></item><item><title><![CDATA[Reply to Zyklus auflösen on Wed, 19 Nov 2008 03:59:16 GMT]]></title><description><![CDATA[<p>Naja, wie gesagt ich hätte es gerne in A gehabt. Aber ich glaube es bleibt mir wohl nix anderes übrig als es aus A zu entfernen und in B.h zu definieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1616890</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1616890</guid><dc:creator><![CDATA[seb80]]></dc:creator><pubDate>Wed, 19 Nov 2008 03:59:16 GMT</pubDate></item><item><title><![CDATA[Reply to Zyklus auflösen on Wed, 19 Nov 2008 07:01:45 GMT]]></title><description><![CDATA[<p>Wie wäre es mit forward declaration?</p>
<pre><code class="language-cpp">// A.h
//kein include

class B; //forward declaration, da du ja nur einen Zeiger hast

class A {
public:
   enum Foo { ... };
   B* b;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1616917</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1616917</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 19 Nov 2008 07:01:45 GMT</pubDate></item></channel></rss>