<?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[Problem mit optionalem Parameter]]></title><description><![CDATA[<p>Hi @ll,</p>
<p>ich habe folgendes Problem:</p>
<p>ich habe eine rekursiver Funktion innerhalb einer Klasse, die einen Struct als optionalen Parameter hat. Bei dem ersten Aufruf dieser Funktion von aussen, wird dieser Parameter nicht übergeben. Wenn die Funktion wieder auf sich selbst verweist, kommt der Parameter dazu.</p>
<p>Realisiert habe ich das wie folgt:</p>
<pre><code>void inorder(branch* p_current=new branch()){
  .
  .
  .
  inorder(p_current-&gt;p_child);
}
</code></pre>
<p>Jetzt habe ich nur das Problem, dass p_child evtl. auch ein leerer Struct sein kann.<br />
Wenn ein Wert des Structs undefined ist, wollte ich p_current=p_start setzen.<br />
Wenn ich das jetzt aber mache, dann laufe ich in einen Endlos-Loop rein.</p>
<p>Hat jemand eine elegante Lösung parat?<br />
einen zweiten Parameter b_first_execution wäre denkbar, aber ich denke es muss irgendwie auch eleganter gehen.</p>
<p>Vielen Dank schon mal im Voraus</p>
<p>Jochen</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/170069/problem-mit-optionalem-parameter</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 23:04:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/170069.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 11 Jan 2007 13:42:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit optionalem Parameter on Thu, 11 Jan 2007 13:42:38 GMT]]></title><description><![CDATA[<p>Hi @ll,</p>
<p>ich habe folgendes Problem:</p>
<p>ich habe eine rekursiver Funktion innerhalb einer Klasse, die einen Struct als optionalen Parameter hat. Bei dem ersten Aufruf dieser Funktion von aussen, wird dieser Parameter nicht übergeben. Wenn die Funktion wieder auf sich selbst verweist, kommt der Parameter dazu.</p>
<p>Realisiert habe ich das wie folgt:</p>
<pre><code>void inorder(branch* p_current=new branch()){
  .
  .
  .
  inorder(p_current-&gt;p_child);
}
</code></pre>
<p>Jetzt habe ich nur das Problem, dass p_child evtl. auch ein leerer Struct sein kann.<br />
Wenn ein Wert des Structs undefined ist, wollte ich p_current=p_start setzen.<br />
Wenn ich das jetzt aber mache, dann laufe ich in einen Endlos-Loop rein.</p>
<p>Hat jemand eine elegante Lösung parat?<br />
einen zweiten Parameter b_first_execution wäre denkbar, aber ich denke es muss irgendwie auch eleganter gehen.</p>
<p>Vielen Dank schon mal im Voraus</p>
<p>Jochen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1207941</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1207941</guid><dc:creator><![CDATA[jmattes]]></dc:creator><pubDate>Thu, 11 Jan 2007 13:42:38 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit optionalem Parameter on Thu, 11 Jan 2007 13:48:25 GMT]]></title><description><![CDATA[<p>Erstmal würde ich als Dafault-Parameter nicht ein neues (leeres) Objekt übergeben, sondern den Startknoten deiner Struktur (ich bin mir nicht sicher, ob da der Compiler mitspielt - im Zweifelsfall verzichtest du auf den optionalen Parameter und nutzt Überladung <code>void inorder(){inorder(p_start);}</code> ).</p>
<p>Und zweitens: Du hast doch sicher irgendeine Kennung, ob der Nachfolgeknoten gültig ist (bei Zeigern nimmt man normalerweise NULL als Kennung &quot;hier ist nichts&quot;) - die kannst du am Anfang der Funktion abfragen:</p>
<pre><code class="language-cpp">void inorder(branch* p_current)
{
  if(p_current != NULL) return;
  ...
  inorder(p_current-&gt;p_child);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1207947</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1207947</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 11 Jan 2007 13:48:25 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit optionalem Parameter on Thu, 11 Jan 2007 14:05:28 GMT]]></title><description><![CDATA[<p>würd als default wert nen null pointer übergeben und dann im struct dafür sorge tragen, dass p_child auch immer als null pointer gesetzt wird.</p>
<pre><code class="language-cpp">struct branch
{
 branch *p_child;
 branch() : p_child(0) {} // oder so ähnlich, was halt passt
 ...
};

void inorder(branch *p_current = 0)
{
 if(!p_current)
  return;
 ...
 inorder(p_current-&gt;p_child);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1207959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1207959</guid><dc:creator><![CDATA[thordk]]></dc:creator><pubDate>Thu, 11 Jan 2007 14:05:28 GMT</pubDate></item></channel></rss>