<?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[&amp;quot;&amp;lt;&amp;quot;-Operator überladen]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich benötige für eine Anwendung Hash-Werte, deren hexadezimale Repräsentation ich als const char* in einer Klasse namens &quot;Key&quot; gekapselt habe. Jetzt würde ich gerne den &quot;kleiner als&quot;-Operator dieser Klasse so überladen, dass ich zwei ihrer Instanzen anhand des Hash-Wertes vergleichen kann. Der überladene Operator schaut in etwa so aus:</p>
<pre><code class="language-cpp">bool Key::operator&lt;(Key* rhs)
{
	if (strcmp(getKey, rhs-&gt;getKey) &lt; 0) return true;
	else return false;
}
</code></pre>
<p>Beim Aufruf von</p>
<pre><code class="language-cpp">Key* a = new Key(...);
Key* b = new Key(...);
if (a &lt; b) ... ;
</code></pre>
<p>wird allerdings der Code meines überladenen Operators überhaupt nicht ausgeführt. Wenn ich dagegen den Operator mittels</p>
<pre><code class="language-cpp">if (a.operator&lt;(b)) ... ;
</code></pre>
<p>aufrufe, dann funktioniert alles wie gewünscht. Woran könnte das denn liegen und wie kann ich die erstere Variante zum Laufen bringen? Wäre über jeden Hinweis sehr dankbar...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/129177/quot-lt-quot-operator-überladen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 04:22:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/129177.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 10 Dec 2005 22:52:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to &amp;quot;&amp;lt;&amp;quot;-Operator überladen on Sat, 10 Dec 2005 22:52:21 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich benötige für eine Anwendung Hash-Werte, deren hexadezimale Repräsentation ich als const char* in einer Klasse namens &quot;Key&quot; gekapselt habe. Jetzt würde ich gerne den &quot;kleiner als&quot;-Operator dieser Klasse so überladen, dass ich zwei ihrer Instanzen anhand des Hash-Wertes vergleichen kann. Der überladene Operator schaut in etwa so aus:</p>
<pre><code class="language-cpp">bool Key::operator&lt;(Key* rhs)
{
	if (strcmp(getKey, rhs-&gt;getKey) &lt; 0) return true;
	else return false;
}
</code></pre>
<p>Beim Aufruf von</p>
<pre><code class="language-cpp">Key* a = new Key(...);
Key* b = new Key(...);
if (a &lt; b) ... ;
</code></pre>
<p>wird allerdings der Code meines überladenen Operators überhaupt nicht ausgeführt. Wenn ich dagegen den Operator mittels</p>
<pre><code class="language-cpp">if (a.operator&lt;(b)) ... ;
</code></pre>
<p>aufrufe, dann funktioniert alles wie gewünscht. Woran könnte das denn liegen und wie kann ich die erstere Variante zum Laufen bringen? Wäre über jeden Hinweis sehr dankbar...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/939298</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/939298</guid><dc:creator><![CDATA[hejira]]></dc:creator><pubDate>Sat, 10 Dec 2005 22:52:21 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;&amp;lt;&amp;quot;-Operator überladen on Sat, 10 Dec 2005 22:56:04 GMT]]></title><description><![CDATA[<p>du vergleichst 2 zeiger.</p>
<p>richtig ist<br />
if(*a&lt;*b)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/939301</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/939301</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 10 Dec 2005 22:56:04 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;&amp;lt;&amp;quot;-Operator überladen on Sat, 10 Dec 2005 23:03:14 GMT]]></title><description><![CDATA[<p>Nabend,</p>
<p>wuerde das so machen:</p>
<pre><code class="language-cpp">class Key {
    //kleiner
    bool lt(const Key&amp; compKey) {
        if (strcmp(getKey, rhs-&gt;getKey) &lt; 0) 
            return true;
        else 
            return false;
    }
};

bool operator&lt;(const Key&amp; right, const Key&amp; left) {
    return right.lt(left);
}
</code></pre>
<p>AFAIR wird bei dir der Operator fuer den Vergleich von zwei Adressen aufgerufen und nicht der, den du<br />
deklariert hast.</p>
<p>mfg<br />
v R</p>
]]></description><link>https://www.c-plusplus.net/forum/post/939305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/939305</guid><dc:creator><![CDATA[virtuell Realisticer]]></dc:creator><pubDate>Sat, 10 Dec 2005 23:03:14 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;&amp;lt;&amp;quot;-Operator überladen on Sat, 10 Dec 2005 23:03:50 GMT]]></title><description><![CDATA[<p>Ups, da war wohl mal wieder jemand schneller <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>mfg<br />
v R</p>
]]></description><link>https://www.c-plusplus.net/forum/post/939306</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/939306</guid><dc:creator><![CDATA[virtuell Realisticer]]></dc:creator><pubDate>Sat, 10 Dec 2005 23:03:50 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;&amp;lt;&amp;quot;-Operator überladen on Sun, 11 Dec 2005 09:22:45 GMT]]></title><description><![CDATA[<p>Danke ihr beiden erstmal für eure schnellen Antworten <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>
<p>Die Sache mit den Adressen leuchtet mir jetzt ein, das Problem ist nur, dass wenn ich den Operator so</p>
<pre><code class="language-cpp">if (*a &lt; *b) ... ;
</code></pre>
<p>aufrufe, dann meint der compiler</p>
<pre><code>no match für &quot;operator&lt;&quot; in &quot;*a &lt; *b&quot;
</code></pre>
<p>Das Problem ist halt, dass ich nur Zeiger auf die Klassen hernehmen kann und relativ einfache Aufrufe brauche...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/939405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/939405</guid><dc:creator><![CDATA[hejira]]></dc:creator><pubDate>Sun, 11 Dec 2005 09:22:45 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;&amp;lt;&amp;quot;-Operator überladen on Sun, 11 Dec 2005 09:27:34 GMT]]></title><description><![CDATA[<p>Deklariere operator&lt; mit const Key &amp;rhs dann müsste es klappen.</p>
<p>Alternativ könnte die Überladung von ::operator&lt;(Key *a, Key *b) klappen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/939407</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/939407</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Sun, 11 Dec 2005 09:27:34 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;&amp;lt;&amp;quot;-Operator überladen on Sun, 11 Dec 2005 10:05:48 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Alternativ könnte die Überladung von ::operator&lt;(Key *a, Key *b) klappen...</p>
</blockquote>
<p>unwahrscheinlich, daß der compiler das zuläßt. wenn man damit anfängt, kommt motgen einer und überlädt den op&lt; für integers.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/939423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/939423</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 11 Dec 2005 10:05:48 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;&amp;lt;&amp;quot;-Operator überladen on Sun, 11 Dec 2005 10:13:59 GMT]]></title><description><![CDATA[<p>Stimmt, geht nicht... War davon abgesehen ein unschöner Vorschlag <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/939426</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/939426</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Sun, 11 Dec 2005 10:13:59 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;&amp;lt;&amp;quot;-Operator überladen on Sun, 11 Dec 2005 22:57:52 GMT]]></title><description><![CDATA[<p>Hallo nochmal,</p>
<p>hab jetzt mal versucht, euren Vorschlag</p>
<pre><code class="language-cpp">bool operator&lt;(const Key&amp; compKey) {
if (strcmp(key, compKey.getKey()) &lt; 0) return true;
    else return false;
}
</code></pre>
<p>bei mir einzubauen, aber meinem Compiler hat das überhaupt nicht gefallen (&quot;Übergabe als this-Argument streicht Qualifizierer&quot;, oder so ähnlich). Jetzt habe ich festgestellt, dass das Problem offensichtlich darin liegt, dass die Variable &quot;key&quot;, die klassenintern den Hash-Wert speichert, bei mir privat ist, und ich darauf per &quot;getKey()&quot; zugreife. Wenn ich sie dagegen public deklariere und innerhalb des Operators direkt darauf zugreife, funktioniert alles:</p>
<pre><code class="language-cpp">strcmp(key, compKey.key)
</code></pre>
<p>Allerdings hätte ich schon gerne, dass man den Wert von außen nicht ohne weiteres ändern kann. Gibt's da vielleicht einen Weg?</p>
<p>Vielen Dank aber schon jetzt für eure Hilfe, das hat mich schon jetzt sehr viel weiter gebbracht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/939897</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/939897</guid><dc:creator><![CDATA[hejira]]></dc:creator><pubDate>Sun, 11 Dec 2005 22:57:52 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;&amp;lt;&amp;quot;-Operator überladen on Sun, 11 Dec 2005 23:09:12 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class Key
{
   ...
   private:
      char *key;

   ...
   public:
      bool operator&lt;(const Key &amp;t_key) { return strcmp(key, t_key.key) &lt; 0 ? true : false; }
   ...
};
</code></pre>
<p>mein compiler macht da keinen stress.</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/939900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/939900</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Sun, 11 Dec 2005 23:09:12 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;&amp;lt;&amp;quot;-Operator überladen on Sun, 11 Dec 2005 23:28:51 GMT]]></title><description><![CDATA[<p>Hm, hab wohl gedacht, dass</p>
<pre><code class="language-cpp">compKey.key
</code></pre>
<p>hier nicht gehen würde, weil &quot;compKey&quot; eine andere Instanz sei und man deshalb von hier aus nicht auf deren private variable &quot;key&quot; zugreifen könne.</p>
<p>Tja, und ich dachte, ich hätte alles ausprobiert... So läuft es jedenfalls bei mir auch. Vielen Dank nochmal an alle, ist ein wirklich tolles Forum!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/939905</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/939905</guid><dc:creator><![CDATA[hejira]]></dc:creator><pubDate>Sun, 11 Dec 2005 23:28:51 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;&amp;lt;&amp;quot;-Operator überladen on Sun, 11 Dec 2005 23:29:52 GMT]]></title><description><![CDATA[<p>Meep Meep schrieb:</p>
<blockquote>
<pre><code class="language-cpp">class Key
{
   ...
   private:
      char *key;
   
   ...
   public:
      bool operator&lt;(const Key &amp;t_key) { return strcmp(key, t_key.key) &lt; 0 ? true : false; }
   ...
};
</code></pre>
<p>mein compiler macht da keinen stress.</p>
<p>Meep Meep</p>
</blockquote>
<p>sollte er auch nicht. allerdings gibt es keinen grund, dass dieser operator non-const ist. und auf das</p>
<pre><code class="language-cpp">x?true:false
</code></pre>
<p>idiom können wir nun wirklich verzichten <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/939906</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/939906</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 11 Dec 2005 23:29:52 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;&amp;lt;&amp;quot;-Operator überladen on Mon, 12 Dec 2005 10:01:20 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>und auf das</p>
<pre><code class="language-cpp">x?true:false
</code></pre>
<p>idiom können wir nun wirklich verzichten <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>
</blockquote>
<p>stimmt.<br />
es muss</p>
<pre><code class="language-cpp">return !!(strcmp(key, t_key.key) &lt; 0);
</code></pre>
<p>heißen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/940006</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940006</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 12 Dec 2005 10:01:20 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;&amp;lt;&amp;quot;-Operator überladen on Mon, 12 Dec 2005 10:07:30 GMT]]></title><description><![CDATA[<p>Warum nicht</p>
<pre><code class="language-cpp">return !((strcmp(key, t_key.key) &lt; 0) ? false : true)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/940012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940012</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 12 Dec 2005 10:07:30 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;&amp;lt;&amp;quot;-Operator überladen on Mon, 12 Dec 2005 10:08:45 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Warum nicht</p>
<pre><code class="language-cpp">return !((strcmp(key, t_key.key) &lt; 0) ? false : true)
</code></pre>
</blockquote>
<p>weil es nicht notwendig ist, das zweimal zu machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/940017</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940017</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 12 Dec 2005 10:08:45 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;&amp;lt;&amp;quot;-Operator überladen on Mon, 12 Dec 2005 10:11:26 GMT]]></title><description><![CDATA[<p>Achso, verstehe <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/940019</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940019</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 12 Dec 2005 10:11:26 GMT</pubDate></item></channel></rss>