<?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[Wie ist das möglich?!]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p>Wie wohl viele hier hab' ich eine Funktion, die nicht so tut wie ich das gerne hätte. Mein Problem dabei: Ich krieg eine Funktionsweise, die ich mir beileibe nicht erklären kann - und entsprechend weis ich auch nicht, wo ich bei der Fehlersuche denn ansetzen sollte. Entsprechend bitte ich nur darum, dass mir jemand erläutern kann, wie Folgendes überhaupt zustande kommen kann, so dass ich mich dann auf Fehlersuche begeben kann. Also los...</p>
<p>Kontext: Ein Programm mit verschiedenen untereinander über Pointer vernetzten Objekten, die alle eine gemeinsame parent class besitzen. Diese parent class besitzt eine virtual methode bool test( Objekt ).<br />
Nun besitzt eines der &quot;Kindobjekte&quot; der parent class eine test-methode mit folgendem <strong>pseudo code</strong>:</p>
<pre><code class="language-cpp">bool ChildObject::test( Object* _whateva )
{
  ...
  for( i: all connections to other objects )
  {
    Object1*=ObjectOnPosition(i);
    Object2*=_whateva-&gt;ObjectOnPosition(i);

    if( !Object1-&gt;test( Object2 ) ) return false;
  }
  return true;
}
</code></pre>
<p>Mein Problem: Das return false funktioniert nicht. Und dies obwohl die if-Bedingung erfüllt ist.<br />
Beispielsweise gibt mir dann...</p>
<pre><code class="language-cpp">bool ChildObject::test( Object* _whateva )
{
  ...
  for( i: all connections to other objects )
  {
    Object1*=ObjectOnPosition(i);
    Object2*=_whateva-&gt;ObjectOnPosition(i);

    if( !Object1-&gt;test( Object2 ) )
    {
       cout&lt;&lt;&quot;Ich war hier!!&quot;&lt;&lt;endl;
       return false;
    }
  }
  return true;
}
</code></pre>
<p>... den Text auf der Konsole aus, aber ein return false passiert keiner, so dass dann...</p>
<pre><code class="language-cpp">bool ChildObject::test( Object* _whateva )
{
  ...
  for( i: all connections to other objects )
  {
    Object1*=ObjectOnPosition(i);
    Object2*=_whateva-&gt;ObjectOnPosition(i);

    if( !Object1-&gt;test( Object2 ) )
    {
       cout&lt;&lt;&quot;Ich war hier!!&quot;&lt;&lt;endl;
       return false;
    }
    cout&lt;&lt;&quot;Aber hier war ich auch!!&quot;&lt;&lt;endl;
  }
  return true;
}
</code></pre>
<p>... tatsächlich immer beide Texte auf der Konsole ausgibt, als ob der return false übersprungen würde?</p>
<p>Das Programm kompiliert und läuft ohne sichtbare Fehler/Warnungen. (g++/Linux)</p>
<p>Kann sich wer einen Reim auf das Problem machen? Wie ist es möglich, dass der eine Befehl ausgeführt wird, der nächste aber nicht? Läuft da beim Kompilieren/Linken irgendwo was schief, nach was für einem Fehler soll ich suchen?</p>
<p>Vielen Dank und Beste Grüsse</p>
<p>Pete</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/279574/wie-ist-das-möglich</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 13:29:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/279574.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 29 Dec 2010 15:59:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wie ist das möglich?! on Wed, 29 Dec 2010 15:59:07 GMT]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p>Wie wohl viele hier hab' ich eine Funktion, die nicht so tut wie ich das gerne hätte. Mein Problem dabei: Ich krieg eine Funktionsweise, die ich mir beileibe nicht erklären kann - und entsprechend weis ich auch nicht, wo ich bei der Fehlersuche denn ansetzen sollte. Entsprechend bitte ich nur darum, dass mir jemand erläutern kann, wie Folgendes überhaupt zustande kommen kann, so dass ich mich dann auf Fehlersuche begeben kann. Also los...</p>
<p>Kontext: Ein Programm mit verschiedenen untereinander über Pointer vernetzten Objekten, die alle eine gemeinsame parent class besitzen. Diese parent class besitzt eine virtual methode bool test( Objekt ).<br />
Nun besitzt eines der &quot;Kindobjekte&quot; der parent class eine test-methode mit folgendem <strong>pseudo code</strong>:</p>
<pre><code class="language-cpp">bool ChildObject::test( Object* _whateva )
{
  ...
  for( i: all connections to other objects )
  {
    Object1*=ObjectOnPosition(i);
    Object2*=_whateva-&gt;ObjectOnPosition(i);

    if( !Object1-&gt;test( Object2 ) ) return false;
  }
  return true;
}
</code></pre>
<p>Mein Problem: Das return false funktioniert nicht. Und dies obwohl die if-Bedingung erfüllt ist.<br />
Beispielsweise gibt mir dann...</p>
<pre><code class="language-cpp">bool ChildObject::test( Object* _whateva )
{
  ...
  for( i: all connections to other objects )
  {
    Object1*=ObjectOnPosition(i);
    Object2*=_whateva-&gt;ObjectOnPosition(i);

    if( !Object1-&gt;test( Object2 ) )
    {
       cout&lt;&lt;&quot;Ich war hier!!&quot;&lt;&lt;endl;
       return false;
    }
  }
  return true;
}
</code></pre>
<p>... den Text auf der Konsole aus, aber ein return false passiert keiner, so dass dann...</p>
<pre><code class="language-cpp">bool ChildObject::test( Object* _whateva )
{
  ...
  for( i: all connections to other objects )
  {
    Object1*=ObjectOnPosition(i);
    Object2*=_whateva-&gt;ObjectOnPosition(i);

    if( !Object1-&gt;test( Object2 ) )
    {
       cout&lt;&lt;&quot;Ich war hier!!&quot;&lt;&lt;endl;
       return false;
    }
    cout&lt;&lt;&quot;Aber hier war ich auch!!&quot;&lt;&lt;endl;
  }
  return true;
}
</code></pre>
<p>... tatsächlich immer beide Texte auf der Konsole ausgibt, als ob der return false übersprungen würde?</p>
<p>Das Programm kompiliert und läuft ohne sichtbare Fehler/Warnungen. (g++/Linux)</p>
<p>Kann sich wer einen Reim auf das Problem machen? Wie ist es möglich, dass der eine Befehl ausgeführt wird, der nächste aber nicht? Läuft da beim Kompilieren/Linken irgendwo was schief, nach was für einem Fehler soll ich suchen?</p>
<p>Vielen Dank und Beste Grüsse</p>
<p>Pete</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2000060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2000060</guid><dc:creator><![CDATA[ccpete]]></dc:creator><pubDate>Wed, 29 Dec 2010 15:59:07 GMT</pubDate></item><item><title><![CDATA[Reply to Wie ist das möglich?! on Wed, 29 Dec 2010 16:05:23 GMT]]></title><description><![CDATA[<p>ccpete schrieb:</p>
<blockquote>
<p>Kann sich wer einen Reim auf das Problem machen?</p>
</blockquote>
<p>Ja. Das ganze Design das du beschreibst riecht nach einem Fehlermagneten.</p>
<blockquote>
<p>Wie ist es möglich, dass der eine Befehl ausgeführt wird, der nächste aber nicht? Läuft da beim Kompilieren/Linken irgendwo was schief, nach was für einem Fehler soll ich suchen?</p>
</blockquote>
<p>Da läuft nichts schief. Dein Programm ist bloß so verquer, dass du selber nicht mehr durchblickst. Zeig uns mal ein vollständiges minimales Beispiel, dann zeigen wir dir die genaue Fehlerursache. Oder noch besser: Benutze einen Debugger und lerne, wie man solchen Fehlern selbst auf die Spur kommt (ist nicht schwer). Oder mach beides.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2000064</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2000064</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 29 Dec 2010 16:05:23 GMT</pubDate></item><item><title><![CDATA[Reply to Wie ist das möglich?! on Wed, 29 Dec 2010 16:41:26 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Ja. Das ganze Design das du beschreibst riecht nach einem Fehlermagneten.</p>
</blockquote>
<p>Auf was spielst du an? Auf die Pointer?</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Da läuft nichts schief. Dein Programm ist bloß so verquer, dass du selber nicht mehr durchblickst.</p>
</blockquote>
<p>Ich danke für die harten Worte. Tatsächlich hatte ich gerade ein Aha-Erlebnis (wie so häufig in den Momenten wo mans aufgibt verkrampft nach einer Lösung zu suchen...). Ich hab' gerade festgestellt ich such einen Fehler dens gar nicht gibt: Alles funktioniert genauso wies beim Erstellen gedacht war <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="🙂"
    /> (da hätte mir ein Debugger wahrlich wenig genützt..). Ich hatte tatsächlich nur beim Testen der Funktion den Überblick verloren (und zwar nur in Bezug auf diese Funktion, wie sie oben steht, nicht auf das ganze Programm). Das Programm an sich halte ich für wohlüberlegt - wobei ich ohne Diagramme und Planung schon längst den Überblick verloren hätte.</p>
<p>Gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2000077</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2000077</guid><dc:creator><![CDATA[ccpete]]></dc:creator><pubDate>Wed, 29 Dec 2010 16:41:26 GMT</pubDate></item></channel></rss>