<?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[Operator &amp;quot;&amp;lt;&amp;quot; overloading]]></title><description><![CDATA[<p>Servus,</p>
<p>ich hab eine eigene Klasse Datum (&quot;Date&quot;) geschrieben und dafür den &quot;&lt;&quot; (kleiner) Operator überladen... Sieht so aus:</p>
<pre><code class="language-cpp">bool Date::operator&lt; (const Date&amp; d2) const{
		if(this-&gt;year != d2.year){
			return this-&gt;year &lt; d2.year ? true : false;
		}
		else if(this-&gt;mon != d2.mon){
			return this-&gt;mon &lt; d2.mon ? true : false;
		}
		else if(this-&gt;day != d2.day){
			return this-&gt;day &lt; d2.day ? true : false;
		}
		else if(this-&gt;hour != d2.hour){
			return this-&gt;hour &lt; d2.hour ? true : false;
		}
		else if(this-&gt;min != d2.min){
			return this-&gt;min &lt; d2.min ? true : false;
		}
		else if(this-&gt;sec != d2.sec){
			return this-&gt;sec &lt; d2.sec ? true : false;
		}else{ /*markierung*/
			return false;
		}
	}
</code></pre>
<p>Doch beim Aufruf:</p>
<pre><code class="language-cpp">while(*begin &lt; *end){
</code></pre>
<p>Springt er direkt aus der Schleife heraus, obwohl *begin kleiner als *end IST. (hab's mir auch ausgeben lassen, es ist kleiner!)<br />
Ich rufe das ganze übrigens bewusst mit Pointern auf (damit er das ganze Zeug nicht immer kopiert ;))</p>
<p>Mit dem Debugger habe ich herausgefunden, dass er immer bis zum else geht (/*markierung*/).<br />
Aber warum funktionieren die Vergleiche nicht? (alle Werte sind unsigned short, nur year ist unsigned long)</p>
<p>Vielen Dank für Hilfe <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/topic/258936/operator-quot-lt-quot-overloading</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 02:21:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/258936.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 17 Jan 2010 09:45:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Operator &amp;quot;&amp;lt;&amp;quot; overloading on Sun, 17 Jan 2010 09:45:29 GMT]]></title><description><![CDATA[<p>Servus,</p>
<p>ich hab eine eigene Klasse Datum (&quot;Date&quot;) geschrieben und dafür den &quot;&lt;&quot; (kleiner) Operator überladen... Sieht so aus:</p>
<pre><code class="language-cpp">bool Date::operator&lt; (const Date&amp; d2) const{
		if(this-&gt;year != d2.year){
			return this-&gt;year &lt; d2.year ? true : false;
		}
		else if(this-&gt;mon != d2.mon){
			return this-&gt;mon &lt; d2.mon ? true : false;
		}
		else if(this-&gt;day != d2.day){
			return this-&gt;day &lt; d2.day ? true : false;
		}
		else if(this-&gt;hour != d2.hour){
			return this-&gt;hour &lt; d2.hour ? true : false;
		}
		else if(this-&gt;min != d2.min){
			return this-&gt;min &lt; d2.min ? true : false;
		}
		else if(this-&gt;sec != d2.sec){
			return this-&gt;sec &lt; d2.sec ? true : false;
		}else{ /*markierung*/
			return false;
		}
	}
</code></pre>
<p>Doch beim Aufruf:</p>
<pre><code class="language-cpp">while(*begin &lt; *end){
</code></pre>
<p>Springt er direkt aus der Schleife heraus, obwohl *begin kleiner als *end IST. (hab's mir auch ausgeben lassen, es ist kleiner!)<br />
Ich rufe das ganze übrigens bewusst mit Pointern auf (damit er das ganze Zeug nicht immer kopiert ;))</p>
<p>Mit dem Debugger habe ich herausgefunden, dass er immer bis zum else geht (/*markierung*/).<br />
Aber warum funktionieren die Vergleiche nicht? (alle Werte sind unsigned short, nur year ist unsigned long)</p>
<p>Vielen Dank für Hilfe <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/1840042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1840042</guid><dc:creator><![CDATA[*lt**Exit*gt*]]></dc:creator><pubDate>Sun, 17 Jan 2010 09:45:29 GMT</pubDate></item><item><title><![CDATA[Reply to Operator &amp;quot;&amp;lt;&amp;quot; overloading on Sun, 17 Jan 2010 10:13:18 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>poste doch mal ein ausführbares Minimalbeispiel, der &lt; operator sieht erstmal korrekt aus, der Fehler wird also wohl woanders liegen. Ansonsten ist</p>
<pre><code class="language-cpp">return this-&gt;year &lt; d2.year ? true : false;
</code></pre>
<p>nicht besonders hübsch,</p>
<pre><code class="language-cpp">return this-&gt;year &lt; d2.year;
</code></pre>
<p>tut es genauso.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1840051</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1840051</guid><dc:creator><![CDATA[KPC]]></dc:creator><pubDate>Sun, 17 Jan 2010 10:13:18 GMT</pubDate></item><item><title><![CDATA[Reply to Operator &amp;quot;&amp;lt;&amp;quot; overloading on Sun, 17 Jan 2010 10:24:35 GMT]]></title><description><![CDATA[<p>oh stimmt... da hab ich mal wieder zu kompliziert gedacht.</p>
<p>mir ist grad aufgefallen, da stimmt nochwas nicht... Bei Eingabe 11.11.1111 11:11 ist this-&gt;year = 2010 !?</p>
<p>Ok, da muss ich nochmal schauen... Danke erstmal, ich meld mich wieder, wenn ich es eingegrenzt habe (oder vllt find ich's ja selbst) <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1840056</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1840056</guid><dc:creator><![CDATA[*lt**Exit*gt*]]></dc:creator><pubDate>Sun, 17 Jan 2010 10:24:35 GMT</pubDate></item><item><title><![CDATA[Reply to Operator &amp;quot;&amp;lt;&amp;quot; overloading on Sun, 17 Jan 2010 13:55:28 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">bool operator&lt; (const Date&amp; lhs, const Date&amp; rhs)
{
  if(lhs.year != rhs.year)
    return lhs.year &lt; rhs.year;

  if(lhs.mon != rhs.mon)
    return lhs.mon &lt; rhs.mon;

  if(lhs.day != rhs.day)
    return lhs.day &lt; rhs.day;

  if(lhs.hour != rhs.hour)
    return lhs.hour &lt; rhs.hour;

  if(lhs.min != rhs.min)
    return lhs.min &lt; rhs.min;

  return lhs.sec &lt; rhs.sec;
}
</code></pre>
<p>guck mal - schon kann man es lesen - allerdings liegt der Fehler nicht hier...<br />
Jz musst du nur noch die Variablennamen durch Getter-Fkt-Aufrufe ersetzen (da der op&lt; nicht wirklich ein Member sein sollte^^)<br />
Die Variablennamen find ich nebenbei gesagt auch relativ hässlich - schreib sie doch einfach aus - wird dich auch nicht umbringen ;o)</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1840174</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1840174</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 17 Jan 2010 13:55:28 GMT</pubDate></item></channel></rss>