<?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[Kann ein Struct sich selbst enthalten?]]></title><description><![CDATA[<p>Hallo,<br />
ich will eine Verzeichnisstruktur nach folgender Form realisieren.</p>
<p>Titel_1<br />
- Titel_1.1<br />
-- TYP1_1.1.1<br />
-- TYP1_1.1.2<br />
-- TYP1_1.1.3<br />
-- TYP2_1.1.1<br />
-- TYP2_1.1.2<br />
-- TYP2_1.1.3<br />
- Titel_1.2<br />
- Titel_1.3<br />
Titel_2<br />
Titel_3<br />
Titel_4</p>
<p>Es ist also eine Art Baumstruktur, wobei es keine definierte Tiefe gibt.<br />
Ein Hauptpunkt kann beliebig viele Unterpunkte enthalten.<br />
An einer beliebigen Stelle im Baum endet die Struktur dann mit Elementen vom Typ1 oder 2.</p>
<p>Wie kann ich sowas mit Structs realisieren?</p>
<p>Ich dachte mir folgendes:<br />
Vector des Structs für die Haupttitel. Wenn ich aber in die nächste Ebene will, dann müsste das Struct sich selbst enthalten. Wie geht das?</p>
<p>Grüße,<br />
Michael</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/203721/kann-ein-struct-sich-selbst-enthalten</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 01:13:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/203721.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 25 Jan 2008 17:37:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kann ein Struct sich selbst enthalten? on Fri, 25 Jan 2008 17:37:49 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich will eine Verzeichnisstruktur nach folgender Form realisieren.</p>
<p>Titel_1<br />
- Titel_1.1<br />
-- TYP1_1.1.1<br />
-- TYP1_1.1.2<br />
-- TYP1_1.1.3<br />
-- TYP2_1.1.1<br />
-- TYP2_1.1.2<br />
-- TYP2_1.1.3<br />
- Titel_1.2<br />
- Titel_1.3<br />
Titel_2<br />
Titel_3<br />
Titel_4</p>
<p>Es ist also eine Art Baumstruktur, wobei es keine definierte Tiefe gibt.<br />
Ein Hauptpunkt kann beliebig viele Unterpunkte enthalten.<br />
An einer beliebigen Stelle im Baum endet die Struktur dann mit Elementen vom Typ1 oder 2.</p>
<p>Wie kann ich sowas mit Structs realisieren?</p>
<p>Ich dachte mir folgendes:<br />
Vector des Structs für die Haupttitel. Wenn ich aber in die nächste Ebene will, dann müsste das Struct sich selbst enthalten. Wie geht das?</p>
<p>Grüße,<br />
Michael</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1443581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1443581</guid><dc:creator><![CDATA[mhecker]]></dc:creator><pubDate>Fri, 25 Jan 2008 17:37:49 GMT</pubDate></item><item><title><![CDATA[Reply to Kann ein Struct sich selbst enthalten? on Fri, 25 Jan 2008 17:40:25 GMT]]></title><description><![CDATA[<p>So?:</p>
<pre><code class="language-cpp">struct Typ
{
    vector&lt;Typ&gt; content;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1443582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1443582</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Fri, 25 Jan 2008 17:40:25 GMT</pubDate></item><item><title><![CDATA[Reply to Kann ein Struct sich selbst enthalten? on Fri, 25 Jan 2008 18:02:13 GMT]]></title><description><![CDATA[<p>Wohl kaum!</p>
<p>Du kannst bei rekursiven Datentypen-Definitionen nur mit Zeigern arbeiten.</p>
<pre><code class="language-cpp">struct Typ
{
    int value;
    vector&lt;Typ*&gt; childs;
};
</code></pre>
<p>Den Speicherplatz (für die einzelnen Struktur-Elemente) mußt du dann mittels new allokieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1443588</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1443588</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Fri, 25 Jan 2008 18:02:13 GMT</pubDate></item><item><title><![CDATA[Reply to Kann ein Struct sich selbst enthalten? on Fri, 25 Jan 2008 19:55:59 GMT]]></title><description><![CDATA[<p>EDIT:<br />
War mal wieder ein Irrglaube...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1443596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1443596</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 25 Jan 2008 19:55:59 GMT</pubDate></item><item><title><![CDATA[Reply to Kann ein Struct sich selbst enthalten? on Fri, 25 Jan 2008 18:39:49 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>So?:</p>
<pre><code class="language-cpp">struct Typ
{
    vector&lt;Typ&gt; content;
};
</code></pre>
</blockquote>
<p>Die Nutzung eines unvollständig definierten Typs bei der Instantiierung einer Templatekomponente der Standardbibliothek führt zu undefiniertem Verhalten (17.4.3.6/2). Lediglich im TR1 gibt es ein paar Ausnahmen (shared_ptr,weak_ptr,enable_shared_from_this).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1443613</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1443613</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 25 Jan 2008 18:39:49 GMT</pubDate></item><item><title><![CDATA[Reply to Kann ein Struct sich selbst enthalten? on Fri, 25 Jan 2008 19:05:22 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Badestrand schrieb:</p>
<blockquote>
<p>So?:</p>
<pre><code class="language-cpp">struct Typ
{
    vector&lt;Typ&gt; content;
};
</code></pre>
</blockquote>
<p>Die Nutzung eines unvollständig definierten Typs bei der Instantiierung einer Templatekomponente der Standardbibliothek führt zu undefiniertem Verhalten (17.4.3.6/2). Lediglich im TR1 gibt es ein paar Ausnahmen (shared_ptr,weak_ptr,enable_shared_from_this).</p>
</blockquote>
<p>Das verstehe ich nicht, was ist da und wieso unvollständig definiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1443637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1443637</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Fri, 25 Jan 2008 19:05:22 GMT</pubDate></item><item><title><![CDATA[Reply to Kann ein Struct sich selbst enthalten? on Fri, 25 Jan 2008 19:42:08 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>Badestrand schrieb:</p>
<blockquote>
<p>So?:</p>
<pre><code class="language-cpp">struct Typ
{
    vector&lt;Typ&gt; content;
};
</code></pre>
</blockquote>
<p>Die Nutzung eines unvollständig definierten Typs bei der Instantiierung einer Templatekomponente der Standardbibliothek führt zu undefiniertem Verhalten (17.4.3.6/2). Lediglich im TR1 gibt es ein paar Ausnahmen (shared_ptr,weak_ptr,enable_shared_from_this).</p>
</blockquote>
<p>Das verstehe ich nicht, was ist da und wieso unvollständig definiert?</p>
</blockquote>
<p>Die Definition von Typ ist erst vollständig mit der geschlossenen geschweiften Klammer. Innerhalb der Definition einer Klasse ist diese unvollständig (außer im Körper von Funktionen, Ctor-Memberinitialisierern und Defaultargumenten). Daher kann eine Klasse sich nicht selbst als nichtstatisches Member haben (denn diese werden in einer Klassendefinition definiert, und Objekte dürfen nicht mit unvollständigem Typ definiert werden), wohl aber als statisches Member (diese werden in einer Klassendefinition nur deklariert). In der Definition</p>
<pre><code class="language-cpp">vector&lt;Typ&gt; content;
</code></pre>
<p>ist Typ unvollständig; weil dass aber eine Definition ist, wird vector&lt;Typ&gt; (dass selbst vollständig wäre) hier implizit instantiiert, und genau das ist unzulässig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1443650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1443650</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 25 Jan 2008 19:42:08 GMT</pubDate></item><item><title><![CDATA[Reply to Kann ein Struct sich selbst enthalten? on Fri, 25 Jan 2008 21:51:54 GMT]]></title><description><![CDATA[<p>AFAIK ist es nicht grundsätzlich unzulässig ein Template mit einem unvollständigen Typ zu instanzieren, sonst hätte boost::shared_ptr ja ein Problem. Das Problem ergibt sich dadurch dass das instanzierte Template im Fall von std::vector (oder anderen STL Templates) Code enthält der nicht mit unvollständigen Typen klarkommt.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a>: interpretiere mein Posting bitte als Frage <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/1443760</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1443760</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 25 Jan 2008 21:51:54 GMT</pubDate></item><item><title><![CDATA[Reply to Kann ein Struct sich selbst enthalten? on Fri, 25 Jan 2008 21:49:07 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>AFAIK ist es nicht grundsätzlich unzulässig ein Template mit einem unvollständigen Typ zu instanzieren, sonst hätte boost::shared_ptr ja ein Problem. Das Problem ergibt sich dadurch dass das instanzierte Template im Fall von std::vector (oder anderen STL Templates) Code enthält der nicht mit unvollständigen Typen klarkommt.</p>
</blockquote>
<p>richtig. Das sollte aus meinen Texten auch so hervorgehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1443765</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1443765</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 25 Jan 2008 21:49:07 GMT</pubDate></item><item><title><![CDATA[Reply to Kann ein Struct sich selbst enthalten? on Fri, 25 Jan 2008 21:53:06 GMT]]></title><description><![CDATA[<p>Gut. Ich war mir nicht 100% sicher was du gemeint hast, deswegen...<br />
Danke <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/1443769</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1443769</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 25 Jan 2008 21:53:06 GMT</pubDate></item><item><title><![CDATA[Reply to Kann ein Struct sich selbst enthalten? on Fri, 25 Jan 2008 22:01:28 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Das Problem ergibt sich dadurch dass das instanzierte Template im Fall von std::vector (oder anderen STL Templates) Code enthält der nicht mit unvollständigen Typen klarkommt.</p>
</blockquote>
<p>richtig. Das sollte aus meinen Texten auch so hervorgehen.</p>
</blockquote>
<p>Aber nur implizit. Ich nehme mal an das liegt <em>Assignable</em> und <em>DefaultConstructible</em>.</p>
<p>edit: was ich schon immer fragen wollte, mich aber nie zu fragen wage ... hast du die Paragraphen im Kopf oder schlägst du nach? <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/1443776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1443776</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Fri, 25 Jan 2008 22:01:28 GMT</pubDate></item><item><title><![CDATA[Reply to Kann ein Struct sich selbst enthalten? on Fri, 25 Jan 2008 22:29:48 GMT]]></title><description><![CDATA[<p>finix schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Das Problem ergibt sich dadurch dass das instanzierte Template im Fall von std::vector (oder anderen STL Templates) Code enthält der nicht mit unvollständigen Typen klarkommt.</p>
</blockquote>
<p>richtig. Das sollte aus meinen Texten auch so hervorgehen.</p>
</blockquote>
<p>Aber nur implizit.</p>
</blockquote>
<blockquote>
<p>Ich nehme mal an das liegt <em>Assignable</em> und <em>DefaultConstructible</em>.</p>
</blockquote>
<p>Soweit würde ich nicht gehen (und für ein Argument, dass diese Bedingungen nicht erfüllt, obwohl es sollte, gibt es eine andere Passage, die das für undefiniert erklärt). Es ist einfach so, dass - wie man sich leicht überlegen kann - viele Templates der Standardbibliothek nur schwierig zu implementieren sind, wenn sie für unvollständige Templateargumente instantiierbar sein sollen. Alle diese Fälle für undefiniert zu erklären, erleichtert die Implementation. Natürlich könnte es Ausnahmen geben - für auto_ptr z.B. wäre das angenehm - aber der Standard tut das nicht. Eine Implementation, die vector mit unvollständigem Argument instantiierbar macht, ist leicht vorstellbar; dies zuzulassen würde aber zum Beispiel eine Optimierung, die bei kleinen Objekten und Vektoren diese ohne zusätzlich Speicherallokiierung im vector-Objekt selbst ablegt (bei std::string kennt man das eher) extrem erschweren. All das ist aber reine Spekulation meinerseits.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1443791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1443791</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 25 Jan 2008 22:29:48 GMT</pubDate></item><item><title><![CDATA[Reply to Kann ein Struct sich selbst enthalten? on Sun, 27 Jan 2008 14:30:33 GMT]]></title><description><![CDATA[<p>Mit einem Pointer auf das struct sollte es also gehen?<br />
Ich werde das heute Abend mal testen.</p>
<p>Vielen Dank,<br />
Michael</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1444531</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1444531</guid><dc:creator><![CDATA[mhecker]]></dc:creator><pubDate>Sun, 27 Jan 2008 14:30:33 GMT</pubDate></item></channel></rss>