<?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 überkreuz einbinden???]]></title><description><![CDATA[<p>Hallo.</p>
<p>Ich habe zwei Klassen-Header in zwei verschiedenen Dateien und jede soll eine Instanz von der jeweils anderen haben:</p>
<p><strong>Beispiel Nr.1 :</strong></p>
<p>classA.h :</p>
<pre><code class="language-cpp">#include &quot;classB.h&quot;

class A{
public:
  A();  
  B klasseB;
}
</code></pre>
<p>classB.h :</p>
<pre><code class="language-cpp">#include &quot;classA.h&quot;

class B{
public:
  B();
  A klasseA;
}
</code></pre>
<p>So gehts schonmal garnicht, da der Prä-Proz sich nun in einer Endlosschleife befindet.</p>
<p><strong>Beispiel Nr. 2 :</strong></p>
<p>classA.h :</p>
<pre><code class="language-cpp">#ifndef _CLASS_A_H_
#define _CLASS_A_H_

#include &quot;classB.h&quot;

class A{
public:
  A();  
  B klasseB;
}

#endif
</code></pre>
<p>classB.h :</p>
<pre><code class="language-cpp">#ifndef _CLASS_B_H_
#define _CLASS_B_H_

#include &quot;classA.h&quot;

class B{
public:
  B();
  A klasseA;
}

#endif
</code></pre>
<p>So gehts aber leider auch nicht, da nun nur die Klasse vom Prä-Proz erkannt wird welche ich zuerst einbinde.</p>
<p><strong>Fazit :</strong></p>
<p>Ich sitze nun schon seit Stunden an diesem Problem. Würde schon gerne der Übersichtlichkeit wegen die Klassen in verschiedene Dateien schreiben.</p>
<p>Da ich aus der Java-Ecke komme und da ein solches Problem einfach nicht auftreten kann(vermisse schon den garbage-collector^^) brauche ich nun dringend: HILFE !!! <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="😉"
    /> <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>Würde mich sehr über einen Tipp oder eine Lösung freuen^^</p>
<p>beste Grüße<br />
grid</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/215699/header-überkreuz-einbinden</link><generator>RSS for Node</generator><lastBuildDate>Mon, 12 Oct 2026 02:08:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/215699.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 14 Jun 2008 10:27:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Header überkreuz einbinden??? on Sat, 14 Jun 2008 10:35:07 GMT]]></title><description><![CDATA[<p>Hallo.</p>
<p>Ich habe zwei Klassen-Header in zwei verschiedenen Dateien und jede soll eine Instanz von der jeweils anderen haben:</p>
<p><strong>Beispiel Nr.1 :</strong></p>
<p>classA.h :</p>
<pre><code class="language-cpp">#include &quot;classB.h&quot;

class A{
public:
  A();  
  B klasseB;
}
</code></pre>
<p>classB.h :</p>
<pre><code class="language-cpp">#include &quot;classA.h&quot;

class B{
public:
  B();
  A klasseA;
}
</code></pre>
<p>So gehts schonmal garnicht, da der Prä-Proz sich nun in einer Endlosschleife befindet.</p>
<p><strong>Beispiel Nr. 2 :</strong></p>
<p>classA.h :</p>
<pre><code class="language-cpp">#ifndef _CLASS_A_H_
#define _CLASS_A_H_

#include &quot;classB.h&quot;

class A{
public:
  A();  
  B klasseB;
}

#endif
</code></pre>
<p>classB.h :</p>
<pre><code class="language-cpp">#ifndef _CLASS_B_H_
#define _CLASS_B_H_

#include &quot;classA.h&quot;

class B{
public:
  B();
  A klasseA;
}

#endif
</code></pre>
<p>So gehts aber leider auch nicht, da nun nur die Klasse vom Prä-Proz erkannt wird welche ich zuerst einbinde.</p>
<p><strong>Fazit :</strong></p>
<p>Ich sitze nun schon seit Stunden an diesem Problem. Würde schon gerne der Übersichtlichkeit wegen die Klassen in verschiedene Dateien schreiben.</p>
<p>Da ich aus der Java-Ecke komme und da ein solches Problem einfach nicht auftreten kann(vermisse schon den garbage-collector^^) brauche ich nun dringend: HILFE !!! <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="😉"
    /> <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>Würde mich sehr über einen Tipp oder eine Lösung freuen^^</p>
<p>beste Grüße<br />
grid</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1528844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1528844</guid><dc:creator><![CDATA[grid]]></dc:creator><pubDate>Sat, 14 Jun 2008 10:35:07 GMT</pubDate></item><item><title><![CDATA[Reply to Header überkreuz einbinden??? on Sat, 14 Jun 2008 10:40:36 GMT]]></title><description><![CDATA[<p>grid schrieb:</p>
<blockquote>
<p>Ich habe zwei Klassen-Header in zwei verschiedenen Dateien und jede soll eine Instanz von der jeweils anderen haben:</p>
</blockquote>
<p>Hallo grid,</p>
<p>das geht nicht. Ist ja auch irgendwie logisch, wenn man sich überlegt was das bedeutet. Wenn eine Schachtel eine (zwangsläufig kleinere) Schachtel enthält und diese soll wiederum die größere enthalten, so geht das einfach nicht.</p>
<p>Im Übrigen ist die gegenseitige Abhängigkeit zweier Klassen immer auch ein Designfehler (auch in Java). Erzähl doch mal, was das für Klassen werden sollen und ein bisschen zur Aufgabenstellung.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1528853</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1528853</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sat, 14 Jun 2008 10:40:36 GMT</pubDate></item><item><title><![CDATA[Reply to Header überkreuz einbinden??? on Sat, 14 Jun 2008 11:32:03 GMT]]></title><description><![CDATA[<p>Hallo Werner.</p>
<p>Also weg von den Beispielen und hin zum eigentlichen Problem^^ :</p>
<p>Ich möchte in einer KlasseA eine Memberfunction einer Instanz der KlasseB als CallBack aufrufen.</p>
<p><strong>ClassA.h:</strong></p>
<pre><code class="language-cpp">#ifndef _CLASS_A_H_
#define _CLASS_A_H_

#include &quot;ClassB.h&quot;

typedef void (ClassB::*callBackFunc)(std::string s);

class ClassA{
public:
ClassA();
void registerCallBackFuncFromClassB(callBackFunc f);
};

#endif
</code></pre>
<p><strong>ClassB.h:</strong></p>
<pre><code class="language-cpp">#ifndef _CLASS_B_H_
#define _CLASS_B_H_

#include &quot;ClassA.h&quot;

class ClassB{
public:
ClassB();
void callMeBackFromClassA(std::string s);
};

#endif
</code></pre>
<p>Da es das selbe Problem mit dem Header-Files über kreuz einbinden ist dachte ich die ersten beiden Beispiele wären vielleicht etwas einfacher zu verstehn.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1528862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1528862</guid><dc:creator><![CDATA[grid]]></dc:creator><pubDate>Sat, 14 Jun 2008 11:32:03 GMT</pubDate></item><item><title><![CDATA[Reply to Header überkreuz einbinden??? on Sat, 14 Jun 2008 11:45:17 GMT]]></title><description><![CDATA[<p>hmmmm...</p>
<p>...Habe gerade in den C++ Projekt-Einstellungen unter &quot;Preprocessor&quot; den Punkt &quot;<strong>Generate Preprocessed File</strong>&quot; von &quot;<strong>No</strong>&quot; auf &quot;<strong>/P</strong>&quot; (With Line Numbers) umgestellt. Nun scheint er den Code ohne Fehler zu übersetzten, braucht aber dafür nun extrem lange da ja eine Datei erzeugt wird....</p>
<p>...ob das die optimale Lösung ist? Was glaubt ihr?</p>
<p>und was ist eigentlich :</p>
<pre><code class="language-cpp">#pragma once
</code></pre>
<p>beste Grüße<br />
grid</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1528878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1528878</guid><dc:creator><![CDATA[grid]]></dc:creator><pubDate>Sat, 14 Jun 2008 11:45:17 GMT</pubDate></item><item><title><![CDATA[Reply to Header überkreuz einbinden??? on Sat, 14 Jun 2008 12:38:32 GMT]]></title><description><![CDATA[<p><code>#pragma once</code> gehört zu Visual Studio und ist die Abkürzung für die Header-Guards. Also anstatt das ifndef define code endif.</p>
<p>Zu deinem Problem. Ich verstehe zwar dein Beispiel überhaupt nicht, aber ich glaube es würde reichen, wenn du es mit forward declaration versuchen würdest. Anstatt eines Objektes zu speichern, speicherst du einfach nur einen Zeiger.</p>
<p>Mal ein kurzes Beispiel:</p>
<pre><code class="language-cpp">// A.hpp

#pragma once

class B;

typedef void (B::*Function)();

class A
{
public:
    void register_function(Function BFunction) { m_BFunction = BFunction; };
    void call_callback(B* pB);

private:
    Function m_BFunction;
}
</code></pre>
<pre><code class="language-cpp">// A.cpp

#include &quot;A.hpp&quot;
#include &quot;B.hpp&quot;

void A::call_callback(B* pB)
{
    (pB-&gt;*m_BFunction)();
}
</code></pre>
<pre><code class="language-cpp">// B.hpp

#pragma once

class B
{
public:
    void test() { std::cout &lt;&lt; &quot;test&quot; &lt;&lt; std::endl; };
}
</code></pre>
<pre><code class="language-cpp">// main

#include &quot;A.hpp&quot;
#include &quot;B.hpp&quot;

int main()
{
    A a;

    a.register_function(&amp;B::test);

    B b;
    a.call_callback(&amp;b);

    return 0;
}
</code></pre>
<p>Ungetestet.<br />
Ich hoffe das hilft weiter.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1528935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1528935</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 14 Jun 2008 12:38:32 GMT</pubDate></item><item><title><![CDATA[Reply to Header überkreuz einbinden??? on Sat, 14 Jun 2008 13:26:22 GMT]]></title><description><![CDATA[<p>Hallo Dravere und Danke für deine Antwort.</p>
<p>Also wenn ich einfach nur vor</p>
<pre><code class="language-cpp">typedef void (ClassB::*callBackFunc)(std::string s);
</code></pre>
<p>ein</p>
<pre><code class="language-cpp">class ClassB;
</code></pre>
<p>schreibe und später in einer anderen .h - Datei eine class ClassB; definiert wird macht das nichts ???</p>
<p>Wird dann einfach die Klasse überschrieben ???</p>
<p>Also:</p>
<pre><code class="language-cpp">class ClassB;
typedef void (ClassB::*callBackFunc)(std::string s);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1528977</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1528977</guid><dc:creator><![CDATA[grid]]></dc:creator><pubDate>Sat, 14 Jun 2008 13:26:22 GMT</pubDate></item><item><title><![CDATA[Reply to Header überkreuz einbinden??? on Sat, 14 Jun 2008 14:09:42 GMT]]></title><description><![CDATA[<p>Überschreiben ist vielleicht etwas der falsche Ausdruck, aber eigentlich ja.</p>
<p>Man gibt einfach bekannt, dass es mal eine Klasse geben wird, welche so heissen wird. Damit kann man dann Zeiger und Referenzen erstellen, allerdings ohne sie zu verwenden, bzw. zu dereferenzieren.<br />
Für die Verwendung (Aufruf von Funktionen, Erstellung von Objekten, Zuweisung von Werten usw.) muss natürlich dann die Klasse vollständig bekannt sein.</p>
<p>Ich bin vielleicht nicht der Oberguru im erklären, daher falls dich noch genauer informieren möchtest, suche mal nach Vorwärtsdeklaration oder Forward Declaration. Gibt sicher auch Themen dazu in diesem Forum <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>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1529002</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1529002</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 14 Jun 2008 14:09:42 GMT</pubDate></item><item><title><![CDATA[Reply to Header überkreuz einbinden??? on Sat, 14 Jun 2008 14:16:09 GMT]]></title><description><![CDATA[<p>Scheint alles zu klappen^^</p>
<p>Vielen Dank !</p>
<p>PS: Hab noch ne Frage, mach aber da ein neues Thema auf <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/1529005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1529005</guid><dc:creator><![CDATA[grid]]></dc:creator><pubDate>Sat, 14 Jun 2008 14:16:09 GMT</pubDate></item><item><title><![CDATA[Reply to Header überkreuz einbinden??? on Sat, 14 Jun 2008 14:25:20 GMT]]></title><description><![CDATA[<p>Ein Callback macht ja eigentlich nur so richtig Sinn, wenn man verschiedene Funktionen registrieren kann. Du könntest also auch eine Inerface-Klasse anlegen, die in beiden Klassen bekannt ist:</p>
<pre><code class="language-cpp">struct ICallback
{
    virtual void callback(const std::string&amp; str) = 0;
};

class A
{
    public:
    void registerCallback(const ICallback&amp; callback);
};

class B : public ICallback
{
    public:
    void callback(const std::string&amp; str);
};
//...
</code></pre>
<p>Alle Klassen, die ein passendes Callback unterstützen sollen, implementieren dann das Interface. Und Objekte dieser Klassen können dann registriert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1529011</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1529011</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Sat, 14 Jun 2008 14:25:20 GMT</pubDate></item><item><title><![CDATA[Reply to Header überkreuz einbinden??? on Sat, 14 Jun 2008 14:31:04 GMT]]></title><description><![CDATA[<p>Hallo Tachyon,<br />
auch ne sehr gute Idee. Danke^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1529014</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1529014</guid><dc:creator><![CDATA[grid]]></dc:creator><pubDate>Sat, 14 Jun 2008 14:31:04 GMT</pubDate></item></channel></rss>