<?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[Gegenseitige Includes = Zwingende Designänderung?]]></title><description><![CDATA[<p>Hi..</p>
<p>Wie ist es eigentlich, wenn sich zwei Header gegenseitig inkludieren können sollen (Mit Klassen zB.)?<br />
Wenn man #pragma once nutzt, dann wird eines der beiden Includes doch ignoriert, nicht? Also bringt es dann höchstens so viel wie eine forward declaration?<br />
Und ohne #pragma once gibt's nen endlos-Inkludieren -&gt; compiler-error.</p>
<p>Hat man immer ein schlechtes Design, wenn sich zwei Header gegenseitig inkludieren müssen?</p>
<p>Manchmal reicht ja auch ne forward declaration, aber nicht wenn man zB. auch Methoden eines Klassenobjekts ansprechen will..?!</p>
<p>Ich erinnere mich an früher, da hatte ich immer dieses Problem, und heutzutage hoffe ich immer darauf, dass so eine Situation nicht vorkommt, wobei das für mich nicht immer einfach ist...</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/253230/gegenseitige-includes-zwingende-designänderung</link><generator>RSS for Node</generator><lastBuildDate>Sun, 13 Sep 2026 23:21:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/253230.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 30 Oct 2009 11:07:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Gegenseitige Includes = Zwingende Designänderung? on Fri, 30 Oct 2009 11:07:12 GMT]]></title><description><![CDATA[<p>Hi..</p>
<p>Wie ist es eigentlich, wenn sich zwei Header gegenseitig inkludieren können sollen (Mit Klassen zB.)?<br />
Wenn man #pragma once nutzt, dann wird eines der beiden Includes doch ignoriert, nicht? Also bringt es dann höchstens so viel wie eine forward declaration?<br />
Und ohne #pragma once gibt's nen endlos-Inkludieren -&gt; compiler-error.</p>
<p>Hat man immer ein schlechtes Design, wenn sich zwei Header gegenseitig inkludieren müssen?</p>
<p>Manchmal reicht ja auch ne forward declaration, aber nicht wenn man zB. auch Methoden eines Klassenobjekts ansprechen will..?!</p>
<p>Ich erinnere mich an früher, da hatte ich immer dieses Problem, und heutzutage hoffe ich immer darauf, dass so eine Situation nicht vorkommt, wobei das für mich nicht immer einfach ist...</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1800621</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1800621</guid><dc:creator><![CDATA[Erkenner]]></dc:creator><pubDate>Fri, 30 Oct 2009 11:07:12 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Includes = Zwingende Designänderung? on Fri, 30 Oct 2009 13:19:23 GMT]]></title><description><![CDATA[<p>Erkenner schrieb:</p>
<blockquote>
<p>Hat man immer ein schlechtes Design, wenn sich zwei Header gegenseitig inkludieren müssen?</p>
</blockquote>
<p>Ja.</p>
<p>Erkenner schrieb:</p>
<blockquote>
<p>Manchmal reicht ja auch ne forward declaration, aber nicht wenn man zB. auch Methoden eines Klassenobjekts ansprechen will..?!</p>
</blockquote>
<p>Will man eigentlich nicht, zumindest nicht im Header. Dort reicht es, den Typ zu deklarieren.</p>
<pre><code class="language-cpp">// =============== A.hpp ===============
class B;

class A
{
    public:
        void GreifeAufBZu();
    private:
        B* ZeigerAufB;
};

// =============== A.cpp =============== 
#include &quot;A.hpp&quot; 
#include &quot;B.hpp&quot; // &lt;- erst hier

void A::GreifeAufBZu()
{
    ZeigerAufB-&gt;MacheWas(*this);
}

// =============== B.hpp ===============
class A;

class B
{
    public:
        void MacheWas(A a);
        A MacheWasAnderes(const A&amp; a);
};

// =============== B.cpp ===============
#include &quot;B.hpp&quot;
#include &quot;A.hpp&quot; // &lt;- erst hier

void B::MacheWas(A a);
{
    // hier a benutzen
}

A B::MacheWasAnderes(const A&amp; a)
{
    // hier a benutzen und 
    // etwas zurückgeben
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1800705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1800705</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 30 Oct 2009 13:19:23 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Includes = Zwingende Designänderung? on Fri, 30 Oct 2009 20:04:06 GMT]]></title><description><![CDATA[<p>Hehe. Langsam denke ich wirklich, dass es sich gelohnt hat den Beitrag zu schreiben:</p>
<p>Gleich der erste: (17.10.09)<br />
<strong>Definitionen und Deklarationen in C++</strong><br />
<a href="http://drakon.ch/" rel="nofollow">http://drakon.ch/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1800964</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1800964</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 30 Oct 2009 20:04:06 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Includes = Zwingende Designänderung? on Sat, 31 Oct 2009 11:47:05 GMT]]></title><description><![CDATA[<p>Hallo alle miteinander,</p>
<p>Ich hatte das selbe Problem wie Erkenner; eure Lösungen haben das Problem an sich gelöst. Allerdings erhielt ich dadurch mehrere Fehler vom Typ LNK2005, nämlich:</p>
<pre><code>1&gt;Snake.obj : error LNK2005: &quot;public: void __thiscall CSnake::Init(int,int,float)&quot; (?Init@CSnake@@QAEXHHM@Z) ist bereits in Item.obj definiert.
1&gt;Snake.obj : error LNK2005: &quot;public: void __thiscall CSnake::Render(void)&quot; (?Render@CSnake@@QAEXXZ) ist bereits in Item.obj definiert.
1&gt;Snake.obj : error LNK2005: &quot;public: void __thiscall CSnake::Update(void)&quot; (?Update@CSnake@@QAEXXZ) ist bereits in Item.obj definiert.
1&gt;Snake.obj : error LNK2005: &quot;private: void __thiscall CSnake::GetKeyState(void)&quot; (?GetKeyState@CSnake@@AAEXXZ) ist bereits in Item.obj definiert.
1&gt;Snake.obj : error LNK2005: &quot;public: bool __thiscall CSnake::CompareRects(struct SDL_Rect,int)&quot; (?CompareRects@CSnake@@QAE_NUSDL_Rect@@H@Z) ist bereits in Item.obj definiert.
1&gt;Snake.obj : error LNK2005: &quot;public: void __thiscall CSnake::NewItem(int)&quot; (?NewItem@CSnake@@QAEXH@Z) ist bereits in Item.obj definiert.
1&gt;Item.obj : error LNK2001: Nicht aufgelöstes externes Symbol &quot;&quot;public: void __thiscall CItem::Init(int,class CSnake *)&quot; (?Init@CItem@@QAEXHPAVCSnake@@@Z)&quot;.
1&gt;Snake.obj : error LNK2001: Nicht aufgelöstes externes Symbol &quot;&quot;public: void __thiscall CItem::Init(int,class CSnake *)&quot; (?Init@CItem@@QAEXHPAVCSnake@@@Z)&quot;.
1&gt;C:\Dokumente und Einstellungen\Tobi\Eigene Dateien\Visual Studio 2008\Projects\Snake2\Debug\Snake2.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
</code></pre>
<p>Kann mir jemand sagen, was diesen Fehler hervorruft? Die Antworten in der msdn waren mir ehrlichgesagt zu hoch... Ich bin noch ein ziemlicher Anfänger.</p>
<p>Gruß<br />
Royal</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801112</guid><dc:creator><![CDATA[Royal_Flush]]></dc:creator><pubDate>Sat, 31 Oct 2009 11:47:05 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Includes = Zwingende Designänderung? on Sat, 31 Oct 2009 12:57:53 GMT]]></title><description><![CDATA[<p>Jopp, du hast die include-guards vergessen(LNK2005)<br />
Und dann auch noch vergessen, Fkt zu definieren(LNK2001)</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801137</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 31 Oct 2009 12:57:53 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Includes = Zwingende Designänderung? on Sat, 31 Oct 2009 13:28:53 GMT]]></title><description><![CDATA[<p>Meinst du mit includeguards:</p>
<pre><code>#ifndef BLA
#define BLA
(Code)
#endif
</code></pre>
<p>Wenn ja, hab ich das in jeder hpp gemacht.</p>
<p>Und was ist Fkt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801154</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801154</guid><dc:creator><![CDATA[Royal_Flush]]></dc:creator><pubDate>Sat, 31 Oct 2009 13:28:53 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Includes = Zwingende Designänderung? on Sat, 31 Oct 2009 13:49:19 GMT]]></title><description><![CDATA[<p>Royal_Flush schrieb:</p>
<blockquote>
<p>Und was ist Fkt?</p>
</blockquote>
<p>Funktion(en). unskilled ist manchmal etwas wortkarg. <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>
<blockquote>
<p>1&gt;Item.obj : error LNK2001: Nicht aufgelöstes externes Symbol &quot;&quot;public: void __thiscall CItem::Init(int,class CSnake *)&quot; (?Init@CItem@@QAEXHPAVCSnake@@@Z)&quot;.<br />
1&gt;Snake.obj : error LNK2001: Nicht aufgelöstes externes Symbol &quot;&quot;public: void __thiscall CItem::Init(int,class CSnake *)&quot; (?Init@CItem@@QAEXHPAVCSnake@@@Z)&quot;.</p>
</blockquote>
<p>Hier steht, dass die Funktionsdefinition zu <code>CItem::Init(int, CSnake*)</code> fehlt.</p>
<p>Zu dem anderen Fehler: Das liegt wahrscheinlich daran, dass gewisse Funktionsdefinitionen im Header stehen und so mehrfach vorhanden sind, was zu einem Fehler führt. Schau doch mal drakons Link an...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801161</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 31 Oct 2009 13:49:19 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Includes = Zwingende Designänderung? on Sat, 31 Oct 2009 14:28:07 GMT]]></title><description><![CDATA[<p>Wenn ich das richtig verstanden habe, soll ich also <strong>alle</strong> Definitionen in die cpp schreiben? Einzeiler habe ich nämlich sonst immer gleich definiert... Interessanterweise bewwirkt die Auslagerung in die cpp genau das Gegenteil. Alle Funktionen, die in der cpp (Snake.cpp) definiert werden anstatt im Header, rufen den LNK2005 hervor, wohingegen im Header definierte Funktionen fehlerfrei kompiliert zu werden scheinen. Das verwirrt mich jetzt enorm.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801182</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801182</guid><dc:creator><![CDATA[Royal_Flush]]></dc:creator><pubDate>Sat, 31 Oct 2009 14:28:07 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Includes = Zwingende Designänderung? on Sat, 31 Oct 2009 14:28:15 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Royal_Flush schrieb:</p>
<blockquote>
<p>Und was ist Fkt?</p>
</blockquote>
<p>Funktion(en). unskilled ist manchmal etwas wortkarg. <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>
</blockquote>
<p>bin ich? :&lt; ^^<br />
sry - dachte, das wäre offensichtlich</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Zu dem anderen Fehler: Das liegt wahrscheinlich daran, dass gewisse Funktionsdefinitionen im Header stehen und so mehrfach vorhanden sind, was zu einem Fehler führt. Schau doch mal drakons Link an...</p>
</blockquote>
<p>oh ja, sry - die fehlermeldung hätte bei fehlenden include-guards anders gelautet^^</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801184</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801184</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 31 Oct 2009 14:28:15 GMT</pubDate></item><item><title><![CDATA[Reply to Gegenseitige Includes = Zwingende Designänderung? on Sat, 31 Oct 2009 14:39:53 GMT]]></title><description><![CDATA[<p>So hat sich erledigt. Ich hab mich vertippt. Ich hab die Snake.cpp anstatt der Snake.hpp eingebunden. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Also, danke für eure Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801190</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801190</guid><dc:creator><![CDATA[Royal_Flush]]></dc:creator><pubDate>Sat, 31 Oct 2009 14:39:53 GMT</pubDate></item></channel></rss>