<?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[Benutzerdefinierte Conversion von Pointern]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe zwei Klassen Node und Node_Container und möchte einen Conversion-Operator definieren, der mir einen Pointer auf Node in einen Pointer auf Node_Container umwandelt. Ich habe es mit</p>
<pre><code class="language-cpp">class Node
{
	Node_Container* node_container();
	operator Node_Container() { return *node_container(); }
	...
};
</code></pre>
<p>versucht (also einen Conversion-Operator von Node zu Node_Container definiert und angenommen, dass man dann automatisch einen von Node* zu Node_Container* hat).</p>
<p>Wenn ich dann aber</p>
<pre><code class="language-cpp">Node_Container n = *target-&gt;first_child();
	Node_Container* p = target-&gt;first_child();
	p = target-&gt;first_child();
</code></pre>
<p>versuche zu kompilieren (target-&gt;first_child() liefert einen Node*), erhalte ich</p>
<blockquote>
<p>cannot convert ‘Node*’ to ‘Node_Container*’ in initialization<br />
cannot convert ‘Node*’ to ‘Node_Container*’ in assignment</p>
</blockquote>
<p>bezüglich der zweiten und dritten Zeile, d.h. Umwandlung von Node zu Node_Container funktioniert, aber nicht von Node* zu Node_Container*.</p>
<p>Kann man das irgendwie beheben?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/211988/benutzerdefinierte-conversion-von-pointern</link><generator>RSS for Node</generator><lastBuildDate>Wed, 14 Oct 2026 14:15:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/211988.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 29 Apr 2008 21:31:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Benutzerdefinierte Conversion von Pointern on Tue, 29 Apr 2008 21:31:51 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe zwei Klassen Node und Node_Container und möchte einen Conversion-Operator definieren, der mir einen Pointer auf Node in einen Pointer auf Node_Container umwandelt. Ich habe es mit</p>
<pre><code class="language-cpp">class Node
{
	Node_Container* node_container();
	operator Node_Container() { return *node_container(); }
	...
};
</code></pre>
<p>versucht (also einen Conversion-Operator von Node zu Node_Container definiert und angenommen, dass man dann automatisch einen von Node* zu Node_Container* hat).</p>
<p>Wenn ich dann aber</p>
<pre><code class="language-cpp">Node_Container n = *target-&gt;first_child();
	Node_Container* p = target-&gt;first_child();
	p = target-&gt;first_child();
</code></pre>
<p>versuche zu kompilieren (target-&gt;first_child() liefert einen Node*), erhalte ich</p>
<blockquote>
<p>cannot convert ‘Node*’ to ‘Node_Container*’ in initialization<br />
cannot convert ‘Node*’ to ‘Node_Container*’ in assignment</p>
</blockquote>
<p>bezüglich der zweiten und dritten Zeile, d.h. Umwandlung von Node zu Node_Container funktioniert, aber nicht von Node* zu Node_Container*.</p>
<p>Kann man das irgendwie beheben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1500850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1500850</guid><dc:creator><![CDATA[ingobulla]]></dc:creator><pubDate>Tue, 29 Apr 2008 21:31:51 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzerdefinierte Conversion von Pointern on Wed, 30 Apr 2008 08:11:42 GMT]]></title><description><![CDATA[<p>Du musst, sofern ich Dein Problem verstanden habe, Deinen Cast-Operator auch für Node_Container* überladen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1500980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1500980</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 30 Apr 2008 08:11:42 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzerdefinierte Conversion von Pointern on Wed, 30 Apr 2008 08:18:50 GMT]]></title><description><![CDATA[<p>Wie macht man das denn? Mein Problem dabei ist, dass ich Cast-Operatoren nur als Member-Funktionen kenne. Kann man die auch irgendwie außerhalb von Klassen definieren? Es gibt ja keine Klasse Node*.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1500986</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1500986</guid><dc:creator><![CDATA[ingobulla]]></dc:creator><pubDate>Wed, 30 Apr 2008 08:18:50 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzerdefinierte Conversion von Pointern on Wed, 30 Apr 2008 08:20:56 GMT]]></title><description><![CDATA[<p>Du kannst keine Operatoren für Zeiger überladen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1500990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1500990</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Wed, 30 Apr 2008 08:20:56 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzerdefinierte Conversion von Pointern on Wed, 30 Apr 2008 08:28:31 GMT]]></title><description><![CDATA[<p>Hmm, achso. So wie sich Dein Problem darstellt, braucht es wohl eine Funktion zum Konvertieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1500991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1500991</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 30 Apr 2008 08:28:31 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzerdefinierte Conversion von Pointern on Wed, 30 Apr 2008 08:31:50 GMT]]></title><description><![CDATA[<p>Oh Mann...<br />
Will ihm keiner sagen dass es sehr stark danach aussieht dass er Mist baut?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1500996</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1500996</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 30 Apr 2008 08:31:50 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzerdefinierte Conversion von Pointern on Wed, 30 Apr 2008 08:38:27 GMT]]></title><description><![CDATA[<p>Na gut <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>
<p>ingobulla, der Wunsch nach automatischer Konvertierung von Node in Node_Container riecht stark nach einem Designproblem. Warum brauchst du das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1501004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1501004</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Wed, 30 Apr 2008 08:38:27 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzerdefinierte Conversion von Pointern on Wed, 30 Apr 2008 08:56:52 GMT]]></title><description><![CDATA[<p>Mein Bedürfnis nach automatischer Pointer-Konvertierung erwächst aus der speziellen Form von Graphen, mit denen ich arbeite (im Wesentlichen geht es darum die Genealogie von HIV unter Berücksichtigung von Rekombination mittels Koaleszenztheorie zu rekonstruieren).</p>
<p>Ich bin mir aber sicher, das es euch nicht zumutbar ist, in reiner Textform die spezielle Form dieser Graphen zu erklären. Von daher: Kann man hier auch irgendwie Graphiken hochladen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1501017</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1501017</guid><dc:creator><![CDATA[ingobulla]]></dc:creator><pubDate>Wed, 30 Apr 2008 08:56:52 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzerdefinierte Conversion von Pointern on Wed, 30 Apr 2008 11:43:06 GMT]]></title><description><![CDATA[<p>Ganz egal was deine Problem-Domäne ist, du musst trotzdem nie einen Konvertierungs-Operator Node -&gt; Node_Container basteln.<br />
Das geht auch einfach mit Accessor Funktionen + Copy-Ctor oder evtl. Clone Funktion (je nachdem was man braucht).</p>
<p>Ich würde es nichtmal als Designproblem bezeichnen, sondern für mich ist das einfach ein Wunsch der aus Faulheit + der fehlenden Erfahrung entsteht. Der (fehlenden) Erfahrung nämlich dass sowas den Code so unleserlich und unverständlich macht dass man mit Wartung und Fehlersuche weit mehr Zeit verschenkt als mit dem geringfügig höheren Tippaufwand wenn man es einfach so schreibt wie es &quot;geschrieben gehört&quot;.</p>
<p>Nämlich so:</p>
<pre><code class="language-cpp">//  Node_Container n = *target-&gt;first_child();
    Node_Container n = *target-&gt;first_child()-&gt;container();
//  Node_Container* p = target-&gt;first_child();
//  p = target-&gt;first_child(); 
    Node_Container* p = target-&gt;first_child()-&gt;container();
    p = target-&gt;first_child()-&gt;container();
</code></pre>
<p>p.S.: die Konvertierung &quot;Node -&gt; Container&quot; ist IMO so wie du die Semantik definiert hast (bzw. wie ich vermute dass du sie definiert hast) auch vollkommen unintuitiv. Wenn dann würde ich mir erwarten einen neuen Container zu bekommen der *nur* diese eine Node enthält. Eine Kopie des Containers zu bekommen wo die Node drinnen steckt (mit allem anderen was der Container sonst noch enthält) ist irgendwie nicht das was man sich erwartet. IMO sollte das Ergebnis einer Konvertierung nur von der Quelle abhängen, und nicht davon wo die Quelle eventuell referenziert wird, drin steckt, oder ob gerade Donnerstag ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1501131</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1501131</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 30 Apr 2008 11:43:06 GMT</pubDate></item></channel></rss>