<?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[Vorwärtsdeklaration einer Klasse in einer Klasse]]></title><description><![CDATA[<p>Hallo,<br />
ich würde gerne eine Klasse per Vorwärtsdeklaration im Header bekannt machen. Diese Klasse ist allerdigns eine Unterklasse.</p>
<pre><code class="language-cpp">class A
{
	class B
	{
		...
	}

	...
}
</code></pre>
<p>Nun habe ich schon verschiedenste Wege versucht, die Klasse B in der Klasse C vorwärts zu deklarieren:</p>
<pre><code class="language-cpp">class A
{
	public class B;
};

class C
{
	void methode(A::B para);
}
</code></pre>
<p>Fehler: A: 'class' Typneudefinition</p>
<pre><code class="language-cpp">namespace A
{
	class B;
};

class C
{
	void methode(A::B para);
}
</code></pre>
<p>Fehler: A wurde bereits als Namespace definiert</p>
<pre><code class="language-cpp">class B;

class C
{
	void methode(A::B para);
}
</code></pre>
<p>Fehler A keine Klasse oder Namespace.</p>
<p>Würde mich freuen, wenn mir wer helfen kann.</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/287186/vorwärtsdeklaration-einer-klasse-in-einer-klasse</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 13:06:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/287186.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 24 May 2011 12:58:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vorwärtsdeklaration einer Klasse in einer Klasse on Tue, 24 May 2011 12:58:11 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich würde gerne eine Klasse per Vorwärtsdeklaration im Header bekannt machen. Diese Klasse ist allerdigns eine Unterklasse.</p>
<pre><code class="language-cpp">class A
{
	class B
	{
		...
	}

	...
}
</code></pre>
<p>Nun habe ich schon verschiedenste Wege versucht, die Klasse B in der Klasse C vorwärts zu deklarieren:</p>
<pre><code class="language-cpp">class A
{
	public class B;
};

class C
{
	void methode(A::B para);
}
</code></pre>
<p>Fehler: A: 'class' Typneudefinition</p>
<pre><code class="language-cpp">namespace A
{
	class B;
};

class C
{
	void methode(A::B para);
}
</code></pre>
<p>Fehler: A wurde bereits als Namespace definiert</p>
<pre><code class="language-cpp">class B;

class C
{
	void methode(A::B para);
}
</code></pre>
<p>Fehler A keine Klasse oder Namespace.</p>
<p>Würde mich freuen, wenn mir wer helfen kann.</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2067919</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2067919</guid><dc:creator><![CDATA[Therese]]></dc:creator><pubDate>Tue, 24 May 2011 12:58:11 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration einer Klasse in einer Klasse on Tue, 24 May 2011 13:13:44 GMT]]></title><description><![CDATA[<p>Das geht leider nicht. Allerdings gibts nur wenige Stellen, wo du interne Klassen wirklich brauchst - darf man fragen was du erreichen willst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2067926</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2067926</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 24 May 2011 13:13:44 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration einer Klasse in einer Klasse on Tue, 24 May 2011 14:41:46 GMT]]></title><description><![CDATA[<p>Wenn ich die Klasse B vorwärtsdeklariere und es dann in der cpp einbinde, muss das Programm, dass die lib der Klasse C einbindet, nicht das Includeverzeichnis der Klasse A mit angeben.</p>
<p>Da die Klasse B nur für die Funktionalität einer Methode gebraucht wird, die nicht immer aufgerufen wird, wäre es mir so lieber, da ich damit nicht alle zu dem Includeverzeichnis verdonnere.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2067961</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2067961</guid><dc:creator><![CDATA[Therese]]></dc:creator><pubDate>Tue, 24 May 2011 14:41:46 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration einer Klasse in einer Klasse on Tue, 24 May 2011 22:08:52 GMT]]></title><description><![CDATA[<p>Das Problem hatte ich <a href="http://www.c-plusplus.net/forum/234000" rel="nofollow">auch mal</a>. Ich würde keine innere Klasse verwenden, das ist das Einfachste. Zur Not kurzzeitig Typsicherheit mit <code>void*</code> ausser Kraft setzen.</p>
<p>Übrigens interessant, wie ich solche Threads wiederfinde... Meistens anhand irgendwelcher Aussagen wie hier &quot;aus dem Ärmel geschüttelt&quot;, lustigerweise kann ich mir die merken <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2068185</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2068185</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 24 May 2011 22:08:52 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration einer Klasse in einer Klasse on Wed, 25 May 2011 11:35:12 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Ich würde keine innere Klasse verwenden, das ist das Einfachste.</p>
</blockquote>
<p>Wenn die Klassen aber Teil der Entwicklungsumgebung ist, die von externen Firmen gemacht wurde, habe ich leider keine Wahl <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":-("
      alt="😞"
    /></p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Zur Not kurzzeitig Typsicherheit mit <code>void*</code> ausser Kraft setzen.</p>
</blockquote>
<p>Muss ich mir überlegen wie ich es nun mache, da ich das eigentlich nicht wirklich schön finde.</p>
<p>Auf jeden Fall Danke für die Antwort</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2068387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2068387</guid><dc:creator><![CDATA[Therese]]></dc:creator><pubDate>Wed, 25 May 2011 11:35:12 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration einer Klasse in einer Klasse on Wed, 25 May 2011 11:43:09 GMT]]></title><description><![CDATA[<p>Therese schrieb:</p>
<blockquote>
<p>Wenn die Klassen aber Teil der Entwicklungsumgebung ist, die von externen Firmen gemacht wurde, habe ich leider keine Wahl <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":-("
      alt="😞"
    /></p>
</blockquote>
<p>Doch. Ein Produkt verwenden, das so einen Murks nicht macht <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>Alternativ sollte ja das A::B was du übergibst schon relativ dicht an ein A gekoppelt sein (sonst wäre es wirklich GROSSER Murks was die externe Firma da veranstaltet hat). Evtl. würde es auch reichen, ein A und etwaige Informationen X, Y an die Methode zu geben, und dann erst in der Methode aus A,X und Y das B zu ermitteln?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2068393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2068393</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 25 May 2011 11:43:09 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration einer Klasse in einer Klasse on Wed, 25 May 2011 15:29:09 GMT]]></title><description><![CDATA[<p>hmm, wäre eine Möglichkeit.</p>
<p>In dem Fall wäre die Klasse, die die Methode aufruft das A selber</p>
<p>Vom Durchdenken der Problematik könnte es nun kompliziert werden aber ich versuchs noch mal aufzuzeichnen <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>
<pre><code class="language-cpp">class A
{
	public class B;
};

class C
{
	void methode(A::B para);
}

class MainClass(B para) : public A(para)
{
	...
	C objectFromC;
	objectFromC.methode(objectFromB);
}
</code></pre>
<p>Hoffe das stimmt nun so und ist verständlich.<br />
Nun könnte ich es so umändern:</p>
<pre><code class="language-cpp">class A
{
	public class B;
};

class C
{
	void methode(A* para);
}

class MainClass(B para) : public A(para)
{
	...
	C objectFromC;
	objectFromC.methode(this);
}
</code></pre>
<p>Wenn die Variable objectFromB in der super-Klasse privat wäre, hätte ich wohl ein Problem, da ich ja auch keinen Getter-Schreiben kann, ohne es auf die abgeleitete Klasse &quot;MainClass&quot; zu beschränken.</p>
<p>In diesem Fall habe ich Glück, es ist public. Aber wie würde man sowas dann noch lösen? (man weiß ja nie, was ich in Zukunft noch machen werde <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2068549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2068549</guid><dc:creator><![CDATA[Therese]]></dc:creator><pubDate>Wed, 25 May 2011 15:29:09 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration einer Klasse in einer Klasse on Wed, 25 May 2011 15:30:55 GMT]]></title><description><![CDATA[<p>kurzer Hinweis:<br />
Ja das mit this ist in diesem Fall, den ich grad mache.<br />
Aber will die Vorwärtsdeklaration machen, weil es auch sein könnte, dass this doch nichts direkt mit A zu tun hat (und in dem Fall wird auch die Methode nicht aufgerufen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2068552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2068552</guid><dc:creator><![CDATA[Therese]]></dc:creator><pubDate>Wed, 25 May 2011 15:30:55 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration einer Klasse in einer Klasse on Wed, 25 May 2011 15:56:59 GMT]]></title><description><![CDATA[<p>Schlage Template vor, dadurch kann der Typ verzögert werden.<br />
Und ein wenig SFINAE, damit's wieder eigentlich kein Template ist.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

//Datei C.hpp
//Eigener Code, die A.hpp ist nicht inkludiert
template&lt;typename X&gt;
struct IAmReallyAnAB{
};

class C
{
    public:
    template&lt;typename AB&gt;
    typename IAmReallyAnAB&lt;AB&gt;::type methode(AB para)
    {
    }
};

//Datei A.hpp
//Fremder Code, darf nicht angefaßt werden
class A
{
    public:
    class B
    {
    };
};

//Datei meineA.hpp
//#include &quot;A.hpp&quot;
template&lt;&gt;
struct IAmReallyAnAB&lt;A::B&gt;{
    typedef void type;
};

int main()
{
    C c;
    A::B b;
    c.methode(b);//Klappt
    c.methode(1);//Klappt nicht
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2068563</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2068563</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 25 May 2011 15:56:59 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration einer Klasse in einer Klasse on Thu, 26 May 2011 14:43:56 GMT]]></title><description><![CDATA[<p>danke für die Antworten<br />
hab mich sehr gefreut</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2069201</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2069201</guid><dc:creator><![CDATA[Therese]]></dc:creator><pubDate>Thu, 26 May 2011 14:43:56 GMT</pubDate></item></channel></rss>