<?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[Kabselungsproblem]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich benötige eine Hauptklasse, deren Instanzen Objekte von Unterklassen beinhalten.<br />
Die Unterklassen sollen in unterschiedlichen Quellcodemodulen definiert werden.<br />
Zugriffs- und Namensauflösung für die Unterklassen darf aber nur in der Hauptklasse möglich sein.</p>
<p>Wie realisiert man so etwas mit C++ am besten?<br />
Mit Namensbereichen, mit Vererbung?</p>
<p>Vielen Dank für eure Ratschläge!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/180827/kabselungsproblem</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 23:29:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/180827.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 07 May 2007 08:46:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kabselungsproblem on Mon, 07 May 2007 08:46:31 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich benötige eine Hauptklasse, deren Instanzen Objekte von Unterklassen beinhalten.<br />
Die Unterklassen sollen in unterschiedlichen Quellcodemodulen definiert werden.<br />
Zugriffs- und Namensauflösung für die Unterklassen darf aber nur in der Hauptklasse möglich sein.</p>
<p>Wie realisiert man so etwas mit C++ am besten?<br />
Mit Namensbereichen, mit Vererbung?</p>
<p>Vielen Dank für eure Ratschläge!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280113</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280113</guid><dc:creator><![CDATA[konstante Katze]]></dc:creator><pubDate>Mon, 07 May 2007 08:46:31 GMT</pubDate></item><item><title><![CDATA[Reply to Kabselungsproblem on Mon, 07 May 2007 08:51:04 GMT]]></title><description><![CDATA[<p>Achja, feste Regeln für Präprozessor-includes sind für meine Sache nicht praktikabel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280115</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280115</guid><dc:creator><![CDATA[konstante Katze]]></dc:creator><pubDate>Mon, 07 May 2007 08:51:04 GMT</pubDate></item><item><title><![CDATA[Reply to Kabselungsproblem on Mon, 07 May 2007 08:58:03 GMT]]></title><description><![CDATA[<p>Geht das bitte auch auf Deutsch? Aus deiner Fragestellung werde ich noch nicht ganz schlau - also was hast du eigentlich vor?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280124</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 07 May 2007 08:58:03 GMT</pubDate></item><item><title><![CDATA[Reply to Kabselungsproblem on Mon, 07 May 2007 09:03:51 GMT]]></title><description><![CDATA[<p>Ich will dass eine Klasse nur innerhalb einer bestimmten Hauptklasse bekannt ist, aber in einem anderen Quellcodemodul als die Hauptklasse definiert wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280131</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280131</guid><dc:creator><![CDATA[konstante Katze]]></dc:creator><pubDate>Mon, 07 May 2007 09:03:51 GMT</pubDate></item><item><title><![CDATA[Reply to Kabselungsproblem on Mon, 07 May 2007 09:14:07 GMT]]></title><description><![CDATA[<p>Widerspricht sich das nicht ein wenig? <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>Du kannst auch Unterklassen in einer Klassendeklaration anlegen - willst du auf so etwas hinaus?</p>
<pre><code class="language-cpp">class master
{
  class helper//nur verfügbar für 'master' und seine friend's
  {
    ...
  };
  ...
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1280139</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280139</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 07 May 2007 09:14:07 GMT</pubDate></item><item><title><![CDATA[Reply to Kabselungsproblem on Mon, 07 May 2007 09:20:38 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>also soweit ich weiß, kannst Du die Sichtbarkeit einer Klassendeklaration nicht beschränken - anders gesagt: Wenn jemand die Headerdatei seiht, kannst Du ihn nicht hindern, ein &quot;#include&quot; darauf zu machen.</p>
<p>Allerdings kannst Du natürlich den den Zugriff durch den Compiler abweisen lassen durch private/public/friend ... aber selbst das kann natürlich durch einen hartnäckigen Nutzer um-editiert werden.</p>
<p>Ist das eigentlich nur ein &quot;Geheimhaltungshobby&quot; oder hat das einen wichtigen Hintergrund. <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>CStoll schrieb:</p>
<blockquote>
<p>...- willst du auf so etwas hinaus?</p>
<pre><code class="language-cpp">class master
{
  class helper//nur verfügbar für 'master' und seine friend's
  {
    ...
  };
  ...
};
</code></pre>
</blockquote>
<p>Naja, er wollte es ja explizit in einer sparaten Headerdatei (klar - könnte er auch per #include machen, aber ich glaube, das verdiente tatsächlich körperliche Züchtigung ... <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>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280145</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280145</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 07 May 2007 09:20:38 GMT</pubDate></item><item><title><![CDATA[Reply to Kabselungsproblem on Mon, 07 May 2007 09:36:43 GMT]]></title><description><![CDATA[<p>OK, erstmal Danke!<br />
Es funktioniert so wie gedacht wenn ich die Helper-Klasse im Helper.cpp Modul definiere.</p>
<p>Ich muss sie aber im Helper.h definieren, da die Methoden als inline eingefügt werden sollen (ist dies überhaupt richtig?).<br />
Die Master-Klasse ist in Master.h deklariert und definiert.<br />
Um das ganze so wie gewollt umzusetzen, muss ich also ein #include Helper.h in der Master.h setzen, sowie ein #include Master.h in der Helper.h.</p>
<p>Und da kracht es. Wieso, und was kann ich tun?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280160</guid><dc:creator><![CDATA[konstante Katze]]></dc:creator><pubDate>Mon, 07 May 2007 09:36:43 GMT</pubDate></item><item><title><![CDATA[Reply to Kabselungsproblem on Mon, 07 May 2007 09:40:47 GMT]]></title><description><![CDATA[<p>Klar, daß es da kracht - solche Abhängigkeits-Ringe sind nie besonders gut. Die kannst du unterbrechen, indem du eine der Klassen forward-deklarierst.</p>
<p>(btw, zeig mal etwas Code)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280165</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 07 May 2007 09:40:47 GMT</pubDate></item><item><title><![CDATA[Reply to Kabselungsproblem on Mon, 07 May 2007 09:52:55 GMT]]></title><description><![CDATA[<p>Dazu müsste ich doch die unbekannte Helper-Klasse in der unbekannten Master-Klasse forward-deklarieren, was doch nicht geht, oder?</p>
<p>Wie bereits gesagt mache ich das alles im Header, da die Methoden inline gesetzt werden sollen.<br />
Ist das überhaupt tatsächlich notwändig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280172</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280172</guid><dc:creator><![CDATA[konstante Katze]]></dc:creator><pubDate>Mon, 07 May 2007 09:52:55 GMT</pubDate></item><item><title><![CDATA[Reply to Kabselungsproblem on Mon, 07 May 2007 09:57:36 GMT]]></title><description><![CDATA[<p>konstante Katze schrieb:</p>
<blockquote>
<p>Dazu müsste ich doch die unbekannte Helper-Klasse in der unbekannten Master-Klasse forward-deklarieren, was doch nicht geht, oder?</p>
</blockquote>
<p>Wie gesagt - zeig mal etwas Code.</p>
<blockquote>
<p>Wie bereits gesagt mache ich das alles im Header, da die Methoden inline gesetzt werden sollen.<br />
Ist das überhaupt tatsächlich notwändig?</p>
</blockquote>
<p>Wieso sollte es notwendig sein, die Methoden inline zu definieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280175</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280175</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 07 May 2007 09:57:36 GMT</pubDate></item><item><title><![CDATA[Reply to Kabselungsproblem on Mon, 07 May 2007 10:25:20 GMT]]></title><description><![CDATA[<p>Eigentlich gibt es das gleiche Problem auch ohne der inline-Definition:</p>
<pre><code class="language-cpp">//Master.h
#include Helper.h

class Master
{
  private:
    class Helper;
    Helper* helper;
    ...
  public:
    void fubar()
    {
       helper-&gt;help();
    }
    ...
};
</code></pre>
<pre><code class="language-cpp">//Helper.h
#include Master.h

class Master::Helper
{
  private:
    void help();
    ...
  public:
    ...
};
</code></pre>
<p>Ist die einzigste Lösung in Master.h alle Zugriffsmethoden von Master::Helper (forwared) zu deklarieren, oder gibt es da einen eleganteren Weg?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280187</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280187</guid><dc:creator><![CDATA[konstante Katze]]></dc:creator><pubDate>Mon, 07 May 2007 10:25:20 GMT</pubDate></item><item><title><![CDATA[Reply to Kabselungsproblem on Mon, 07 May 2007 10:30:57 GMT]]></title><description><![CDATA[<p>konstante Katze schrieb:</p>
<blockquote>
<p>Ist die einzigste Lösung in Master.h alle Zugriffsmethoden von Master::Helper (forwared) zu deklarieren, oder gibt es da einen eleganteren Weg?</p>
</blockquote>
<p>Vermutlich ja (ich bin mir noch nichmal sicher, ob deine Konstruktion überhaupt standardkonform ist). Auf jeden Fall ist das #include &quot;Helper.h&quot; vor der Definition der Master-Klasse verkehrt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280188</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280188</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 07 May 2007 10:30:57 GMT</pubDate></item><item><title><![CDATA[Reply to Kabselungsproblem on Mon, 07 May 2007 13:08:51 GMT]]></title><description><![CDATA[<p>Wenn die Klassen 'Helper' etc. nicht nach außen hin sichtbar sein sollen, dann arbeite doch mit dem PrivateData-Idiom, d.h. du deklarierst alle privaten Daten nur in der cpp-Datei.</p>
<p>Beispiel:<br />
// master.h</p>
<pre><code class="language-cpp">class Master
{
  private:
    class PrivateData;
    PrivateData *m_pData;
    ...
  public:
    ...
</code></pre>
<p>// master.cpp</p>
<pre><code class="language-cpp">#include &quot;Helper.h&quot;

class Master::PrivateData
{
  Helper *helper;
};

Master::Master()
{
   m_pData = new PrivateData();
}

Master::~Master()
{
   delete m_pData;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1280242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280242</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Mon, 07 May 2007 13:08:51 GMT</pubDate></item><item><title><![CDATA[Reply to Kabselungsproblem on Mon, 07 May 2007 12:37:47 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>nur der Vollständigkeit halber: Geben Sie noch einen * dazu:</p>
<p>Th schrieb:</p>
<blockquote>
<p>...</p>
<pre><code class="language-cpp">class Master
{
  private:
    class PrivateData;
    PrivateData* m_pData;
    ...
</code></pre>
</blockquote>
<p><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>Das Problem ist, dass der OP ja gerne die Methoden inlinen will ... und da braucht's dann schon die Definition von PrivateData....</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280270</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280270</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 07 May 2007 12:37:47 GMT</pubDate></item></channel></rss>