<?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[Forward declaration geht nicht]]></title><description><![CDATA[<p>Ich habe hier 2 Klassen; A und B, die sich gegenseitig verwenden können sollen.</p>
<pre><code class="language-cpp">class B;

class A
{
	friend class B;
private:
	B *_pB;
public:
	A()
	{
	}
	void SetB(B *pB)
	{
		this-&gt;_pB-&gt;SetNull();
		this-&gt;_pB = pB;
	}
	void SetNull()
	{
		this-&gt;_pB = NULL;
	}
};

class B
{
	friend class A;
private:
	A *_pA;
public:
	B()
	{
	}
	void SetA(A *pA)
	{
		this-&gt;_pA-&gt;SetNull();
		this-&gt;_pA = pA;
	}
	void SetNull()
	{
		this-&gt;_pA = NULL;
	}
};
</code></pre>
<p>Probleme gibt es aber mit den Zeilen 14 und 34.<br />
Warum kann ich von der jeweils anderen Klasse keine Methoden benutzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/305097/forward-declaration-geht-nicht</link><generator>RSS for Node</generator><lastBuildDate>Sat, 08 Aug 2026 22:13:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/305097.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 20 Jun 2012 18:47:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Forward declaration geht nicht on Wed, 20 Jun 2012 18:47:44 GMT]]></title><description><![CDATA[<p>Ich habe hier 2 Klassen; A und B, die sich gegenseitig verwenden können sollen.</p>
<pre><code class="language-cpp">class B;

class A
{
	friend class B;
private:
	B *_pB;
public:
	A()
	{
	}
	void SetB(B *pB)
	{
		this-&gt;_pB-&gt;SetNull();
		this-&gt;_pB = pB;
	}
	void SetNull()
	{
		this-&gt;_pB = NULL;
	}
};

class B
{
	friend class A;
private:
	A *_pA;
public:
	B()
	{
	}
	void SetA(A *pA)
	{
		this-&gt;_pA-&gt;SetNull();
		this-&gt;_pA = pA;
	}
	void SetNull()
	{
		this-&gt;_pA = NULL;
	}
};
</code></pre>
<p>Probleme gibt es aber mit den Zeilen 14 und 34.<br />
Warum kann ich von der jeweils anderen Klasse keine Methoden benutzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2225522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2225522</guid><dc:creator><![CDATA[dddaaa]]></dc:creator><pubDate>Wed, 20 Jun 2012 18:47:44 GMT</pubDate></item><item><title><![CDATA[Reply to Forward declaration geht nicht on Wed, 20 Jun 2012 18:58:50 GMT]]></title><description><![CDATA[<p>dddaaa schrieb:</p>
<blockquote>
<p>Probleme gibt es aber mit den Zeilen 14 und 34.</p>
</blockquote>
<p>Ist das eigentlich so schwer zu begreifen, dass das keine ausreichende Problembeschreibung ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2225527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2225527</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Wed, 20 Jun 2012 18:58:50 GMT</pubDate></item><item><title><![CDATA[Reply to Forward declaration geht nicht on Wed, 20 Jun 2012 19:03:16 GMT]]></title><description><![CDATA[<p>dddaaa schrieb:</p>
<blockquote>
<p>Warum kann ich von der jeweils anderen Klasse keine Methoden benutzen?</p>
</blockquote>
<p>Weil eine Forward Declaration dafür nicht ausreicht. Um eine Methode aufzurufen, muss diese zuerst auch mal deklariert sein. D.h.: Du brauchst die vollständige Definition der Klasse. Lösung: Methode außerhalb der Klassendefinition definieren...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2225530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2225530</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Wed, 20 Jun 2012 19:03:16 GMT</pubDate></item><item><title><![CDATA[Reply to Forward declaration geht nicht on Wed, 20 Jun 2012 19:09:22 GMT]]></title><description><![CDATA[<p>dddaaa schrieb:</p>
<blockquote>
<p>Ich habe hier 2 Klassen; A und B, die sich gegenseitig verwenden können sollen.</p>
</blockquote>
<p>Hui, ist das einfach. Beide vorwärtsdeklarieren, dann beide definieren und danach für beide die Member-Funktionen definieren. In den Funktionsdefinitionen können beide Klassen dann normal genutzt werden.</p>
<p>Also</p>
<pre><code class="language-cpp">class A;
class B;

class A 
{ 
    friend class B; 
private: 
    B *_pB; 
public: 
    A();

    void SetB(B *pB);

    void SetNull();
}; 

class B 
{ 
    friend class A; 
private: 
    A *_pA; 
public: 
    B();

    void SetA(A *pA);

    void SetNull();
};

A::A() 
{ 
} 
void A::SetB(B *pB) 
{ 
  _pB-&gt;SetNull(); 
  _pB = pB; 
} 
void A::SetNull() 
{ 
  _pB = NULL; 
} 

B::B() 
{ 
} 
void B::SetA(A *pA) 
{ 
  _pA-&gt;SetNull(); 
  _pA = pA; 
} 
void B::SetNull() 
{ 
  _pA = NULL; 
}
</code></pre>
<p>Ungetestet (keine Garantie gegen Flüchtigkeitsfehler <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="😃"
    /> )<br />
<code>this-&gt;</code> hab ich mal weggenommen. Sieht dann weniger kryptisch aus.<br />
Formatierung ist übrigens auch nicht die hübscheste...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2225532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2225532</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 20 Jun 2012 19:09:22 GMT</pubDate></item><item><title><![CDATA[Reply to Forward declaration geht nicht on Wed, 20 Jun 2012 19:09:21 GMT]]></title><description><![CDATA[<p>Cool funktioniert danke, wieder was gelernt!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2225533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2225533</guid><dc:creator><![CDATA[dddaaa]]></dc:creator><pubDate>Wed, 20 Jun 2012 19:09:21 GMT</pubDate></item><item><title><![CDATA[Reply to Forward declaration geht nicht on Fri, 29 Jun 2012 19:08:27 GMT]]></title><description><![CDATA[<p>Und wie mach ich das, wenn ich eine Klasse in jeweils einer Header Datei haben möchte?</p>
<p>Also z.B. habe ich:</p>
<p>a.h</p>
<pre><code class="language-cpp">#ifndef A_H
#define A_H

#include &quot;b.h&quot;

class A 
{ 
private:
	B *_pB;
public:
	A();

	void SetB(B *pB);
	void SetNull();
};

A::A() 
{ 
}

void A::SetB(B *pB) 
{
	_pB-&gt;SetNull();
	_pB = pB;
}
void A::SetNull() 
{
	_pB = NULL;
}

B::B() 
{
}

#endif
</code></pre>
<p>und b.h</p>
<pre><code class="language-cpp">#ifndef B_H
#define B_H

#include &quot;a.h&quot;

class B
{
private:
	A *_pA;
public:
	B();

	void SetA(A *pA);
	void SetNull();
};

B::B() 
{
}

void B::SetA(A *pA) 
{
	_pA-&gt;SetNull();
	_pA = pA;
}
void B::SetNull() 
{
	_pA = NULL;
}

#endif
</code></pre>
<p>Dann kommt es wieder zum alten Problem.<br />
Es sei denn, ich erstelle noch eine 3. Header Datei: ab.h</p>
<pre><code class="language-cpp">#ifndef AB_H
#define AB_H

#include &quot;a.h&quot;
#include &quot;b.h&quot;

A::A() 
{ 
}

void A::SetB(B *pB) 
{
	_pB-&gt;SetNull();
	_pB = pB;
}
void A::SetNull() 
{
	_pB = NULL;
}

B::B() 
{
}

void B::SetA(A *pA) 
{
	_pA-&gt;SetNull();
	_pA = pA;
}
void B::SetNull() 
{
	_pA = NULL;
}

#endif
</code></pre>
<p>In dieser sind nun die Methoden der Klassen A und B enthalten und das Programm läuft.</p>
<p>Ginge das denn auch ohne ab.h?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228544</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228544</guid><dc:creator><![CDATA[dddaaa]]></dc:creator><pubDate>Fri, 29 Jun 2012 19:08:27 GMT</pubDate></item><item><title><![CDATA[Reply to Forward declaration geht nicht on Fri, 29 Jun 2012 20:51:41 GMT]]></title><description><![CDATA[<p>Schon mal was von Header&amp;Source gehört? Ist 'ne <strong>ganz</strong> tolle Sache.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228567</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 29 Jun 2012 20:51:41 GMT</pubDate></item></channel></rss>