<?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[Probleme bei Operator-Überladung von &amp;lt;]]></title><description><![CDATA[<p>Hi</p>
<p>Ich habe schon länger kein operator overloading mehr gebraucht, aber nun ist es wieder so weit. Kann mir jemand sagen, was an dem Code falsch ist?</p>
<pre><code class="language-cpp">struct Node
	{
		Node* left;
		Node* right;
		std::string symbol;

		Node( std::string &amp; a_symbol, Node* a_left = 0, Node* a_right = 0 ) : left(a_left), right(a_right), symbol(a_symbol) {}

		bool operator&lt; ( const Node &amp; lhs, const Node &amp; rhs )
		{
			return false;
		}

	};
</code></pre>
<p>Ich bekomme folgende Fehlermeldung:</p>
<blockquote>
<p>error C2804: binary 'operator &lt;' has too many parameters<br />
error C2333: '`anonymous-namespace'::Node::operator &lt;' : error in function declaration; skipping function body</p>
</blockquote>
<p>Ich habe extra schon im Beitrag von pumuckl über overloading nachgesehen. Es müsste aus meiner Sicht stimmen was ich mache.</p>
<p>Ich hoffe, ich übersehe nichts peinliches <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/286279/probleme-bei-operator-überladung-von-lt</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 23:57:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/286279.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 06 May 2011 21:01:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme bei Operator-Überladung von &amp;lt; on Fri, 06 May 2011 21:01:51 GMT]]></title><description><![CDATA[<p>Hi</p>
<p>Ich habe schon länger kein operator overloading mehr gebraucht, aber nun ist es wieder so weit. Kann mir jemand sagen, was an dem Code falsch ist?</p>
<pre><code class="language-cpp">struct Node
	{
		Node* left;
		Node* right;
		std::string symbol;

		Node( std::string &amp; a_symbol, Node* a_left = 0, Node* a_right = 0 ) : left(a_left), right(a_right), symbol(a_symbol) {}

		bool operator&lt; ( const Node &amp; lhs, const Node &amp; rhs )
		{
			return false;
		}

	};
</code></pre>
<p>Ich bekomme folgende Fehlermeldung:</p>
<blockquote>
<p>error C2804: binary 'operator &lt;' has too many parameters<br />
error C2333: '`anonymous-namespace'::Node::operator &lt;' : error in function declaration; skipping function body</p>
</blockquote>
<p>Ich habe extra schon im Beitrag von pumuckl über overloading nachgesehen. Es müsste aus meiner Sicht stimmen was ich mache.</p>
<p>Ich hoffe, ich übersehe nichts peinliches <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2059793</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2059793</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Fri, 06 May 2011 21:01:51 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Operator-Überladung von &amp;lt; on Fri, 06 May 2011 21:06:34 GMT]]></title><description><![CDATA[<p>Wenn du den Operator als Methode der Klasse/Struct definierst, benötigst du nur einen Parameter (der linke Operand ist *this). Zwei Parameter benötigst du nur, wenn du den Operator global, d.h. außerhalb der Klasse, definierst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2059797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2059797</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 06 May 2011 21:06:34 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Operator-Überladung von &amp;lt; on Fri, 06 May 2011 21:17:34 GMT]]></title><description><![CDATA[<p>Stimmt. Die Funktion wird ja auf dem Objekt aufgerufen.</p>
<p>Das Problem ist nur, dass ich auch mit</p>
<pre><code class="language-cpp">bool operator&lt; ( const Node &amp; lhs )
		{
			return false;
		}
</code></pre>
<p>folgenden Fehler erhalte:</p>
<blockquote>
<p>c:\program files\microsoft visual studio 10.0\vc\include\algorithm(3559): error C2784: 'bool std::operator &lt;(const std::basic_string&lt;_Elem,_Traits,_Alloc&gt; &amp;,const _Elem *)' : could not deduce template argument for 'const std::basic_string&lt;_Elem,_Traits,_Alloc&gt; &amp;' from 'ica::Letter'<br />
c:\program files\microsoft visual studio 10.0\vc\include\string(243) : see declaration of 'std::operator &lt;'<br />
c:\program files\microsoft visual studio 10.0\vc\include\algorithm(3614) : see reference to function template instantiation 'std::pair&lt;_Ty1,_Ty2&gt; std::_Unguarded_partition&lt;_RanIt&gt;(_RanIt,_RanIt)' being compiled<br />
with<br />
[<br />
_Ty1=ica::Letter *,<br />
_Ty2=ica::Letter <em>,<br />
_RanIt=ica::Letter *<br />
]<br />
c:\program files\microsoft visual studio 10.0\vc\include\algorithm(3642) : see reference to function template instantiation 'void std::_Sort&lt;ica::Letter</em>,__w64 int&gt;(_RanIt,_RanIt,_Diff)' being compiled<br />
with<br />
[<br />
_RanIt=ica::Letter *,<br />
_Diff=__w64 int<br />
]<br />
c:\users\urs\documents\eth\2. semester\datenstrukturen und algorithmen\serie 10\huffman code\huffman code\huffmancode.cpp(10) : see reference to function template instantiation 'void std::sort&lt;std::_Vector_iterator&lt;_Myvec&gt;&gt;(_RanIt,_RanIt)' being compiled<br />
with<br />
[<br />
_Myvec=std::_Vector_val&lt;ica::Letter,std::allocator<a href="ica::Letter" rel="nofollow">ica::Letter</a>&gt;,<br />
_RanIt=std::_Vector_iterator&lt;std::_Vector_val&lt;ica::Letter,std::allocator<a href="ica::Letter" rel="nofollow">ica::Letter</a>&gt;&gt;<br />
]<br />
c:\program files\microsoft visual studio 10.0\vc\include\algorithm(3559): error C2784: 'bool std::operator &lt;(const _Elem *,const std::basic_string&lt;_Elem,_Traits,_Alloc&gt; &amp;)' : could not deduce template argument for 'const _Elem *' from 'ica::Letter'<br />
c:\program files\microsoft visual studio 10.0\vc\include\string(233) : see declaration of 'std::operator &lt;'<br />
c:\program files\microsoft visual studio 10.0\vc\include\algorithm(3559): error C2784: 'bool std::operator &lt;(const std::basic_string&lt;_Elem,_Traits,_Alloc&gt; &amp;,const std::basic_string&lt;_Elem,_Traits,_Alloc&gt; &amp;)' : could not deduce template argument for 'const std::basic_string&lt;_Elem,_Traits,_Alloc&gt; &amp;' from 'ica::Letter'<br />
c:\program files\microsoft visual studio 10.0\vc\include\string(223) : see declaration of 'std::operator &lt;'<br />
c:\program files\microsoft visual studio 10.0\vc\include\algorithm(3559): error C2784: 'bool std::operator &lt;(const std::vector&lt;_Ty,_Ax&gt; &amp;,const std::vector&lt;_Ty,_Ax&gt; &amp;)' : could not deduce template argument for 'const std::vector&lt;_Ty,_Ax&gt; &amp;' from 'ica::Letter'<br />
c:\program files\microsoft visual studio 10.0\vc\include\vector(1502) : see declaration of 'std::operator &lt;'<br />
c:\program files\microsoft visual studio 10.0\vc\include\algorithm(3559): error C2784: 'bool std::operator &lt;(const std::unique_ptr&lt;_Ty,_Dx&gt; &amp;,const std::unique_ptr&lt;_Ty2,_Dx2&gt; &amp;)' : could not deduce template argument for 'const std::unique_ptr&lt;_Ty,_Dx&gt; &amp;' from 'ica::Letter'<br />
c:\program files\microsoft visual studio 10.0\vc\include\memory(2582) : see declaration of 'std::operator &lt;'<br />
c:\program files\microsoft visual studio 10.0\vc\include\algorithm(3559): error C2784: 'bool std::operator &lt;(const std::reverse_iterator&lt;_RanIt&gt; &amp;,const std::reverse_iterator&lt;_RanIt2&gt; &amp;)' : could not deduce template argument for 'const std::reverse_iterator&lt;_RanIt&gt; &amp;' from 'ica::Letter'<br />
c:\program files\microsoft visual studio 10.0\vc\include\xutility(1356) : see declaration of 'std::operator &lt;'<br />
c:\program files\microsoft visual studio 10.0\vc\include\algorithm(3559): error C2784: 'bool std::operator &lt;(const std::_Revranit&lt;_RanIt,_Base&gt; &amp;,const std::_Revranit&lt;_RanIt2,_Base2&gt; &amp;)' : could not deduce template argument for 'const std::_Revranit&lt;_RanIt,_Base&gt; &amp;' from 'ica::Letter'<br />
c:\program files\microsoft visual studio 10.0\vc\include\xutility(1179) : see declaration of 'std::operator &lt;'<br />
c:\program files\microsoft visual studio 10.0\vc\include\algorithm(3559): error C2784: 'bool std::operator &lt;(const std::pair&lt;_Ty1,_Ty2&gt; &amp;,const std::pair&lt;_Ty1,_Ty2&gt; &amp;)' : could not deduce template argument for 'const std::pair&lt;_Ty1,_Ty2&gt; &amp;' from 'ica::Letter'<br />
c:\program files\microsoft visual studio 10.0\vc\include\utility(318) : see declaration of 'std::operator &lt;'<br />
c:\program files\microsoft visual studio 10.0\vc\include\algorithm(3559): error C2676: binary '&lt;' : 'ica::Letter' does not define this operator or a conversion to a type acceptable to the predefined operator<br />
c:\program files\microsoft visual studio 10.0\vc\include\algorithm(3559): fatal error C1903: unable to recover from previous error(s); stopping compilation</p>
</blockquote>
<p>Kannst du mir sagen was ich falsch mache?</p>
<p>*Edit<br />
Ich glaube es müsste so aussehen:</p>
<pre><code class="language-cpp">bool operator&lt; ( const Node &amp; lhs ) const
		{
			return false;
		}
</code></pre>
<p>Bekomme aber immer noch den gleichen Fehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2059800</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2059800</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Fri, 06 May 2011 21:17:34 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Operator-Überladung von &amp;lt; on Fri, 06 May 2011 21:21:55 GMT]]></title><description><![CDATA[<p>Was ist denn ica::Letter? Das sieht auf jeden Fall nicht nach einem vordefinierten Typ aus der Standard-Bibliothek aus.</p>
<p>Außerdem solltest du mal die Stelle posten, die diesen Fehler verursacht hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2059803</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2059803</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 06 May 2011 21:21:55 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Operator-Überladung von &amp;lt; on Fri, 06 May 2011 21:39:54 GMT]]></title><description><![CDATA[<p>Da der Code noch sehr kurz ist werde ich ihn mal ganz posten (ist natürlich noch nicht fertig und ich noch nicht wirklich alles sorgfältig überdacht. Ist mehr um ein bisschen zu testen gedacht):</p>
<pre><code class="language-cpp">//HuffmanCode.h

#ifndef HUFF_44_MAN_CODE
#define HUFF_44_MAN_CODE

#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;string&gt;

namespace
{
	struct Node
	{
		Node* left;
		Node* right;
		std::string symbol;

		Node( std::string &amp; a_symbol, Node* a_left = 0, Node* a_right = 0 ) : left(a_left), right(a_right), symbol(a_symbol) {}

		bool operator&lt; ( const Node &amp; lhs ) const
		{
			return false;
		}

	};
}

namespace ica
{
	struct Letter
	{
		char letter;
		int frequency;
	};

	class HuffmanCode
	{
	private:
		std::vector&lt;Letter&gt; symbols;
		Node* root;
	public:
		// Ctor
		HuffmanCode( std::vector&lt;Letter&gt; &amp; a_symbols );

		//std::string encode( const std::string &amp; s );
		//std::string decode( const std::string &amp; s );
	};

}

#endif
</code></pre>
<p>Und das Implementierungsfile:</p>
<pre><code class="language-cpp">#include &quot;HuffmanCode.h&quot;

#include &lt;algorithm&gt;

namespace ica
{
	HuffmanCode::HuffmanCode( std::vector&lt;Letter&gt; &amp; a_symbols ) : symbols(a_symbols), root(0)
	{
		std::sort( symbols.begin(), symbols.end() ); // Hier liegt das Problem und ist auch der Grund, warum ich den '&lt;' Operator überladen muss.
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2059809</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2059809</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Fri, 06 May 2011 21:39:54 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Operator-Überladung von &amp;lt; on Fri, 06 May 2011 21:49:52 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">namespace 
{ 
    struct Node 
    { 
        Node* left; 
        Node* right; 
        std::string symbol; 

        Node( std::string &amp; a_symbol, Node* a_left = 0, Node* a_right = 0 ) : left(a_left), right(a_right), symbol(a_symbol) {} 
    }; 

       bool operator&lt; ( const Node &amp; lhs, const Node&amp; rhs) const 
       { 
            return false; 
       } 
}
</code></pre>
<p>std::sort braucht die 2 wertige Variante.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2059817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2059817</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 06 May 2011 21:49:52 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Operator-Überladung von &amp;lt; on Fri, 06 May 2011 21:53:37 GMT]]></title><description><![CDATA[<p>Oder alternativ einen less-Funktor, den es bereits gibt. Dann sollte es auch mit der anderen Variante gehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2059819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2059819</guid><dc:creator><![CDATA[*rant*]]></dc:creator><pubDate>Fri, 06 May 2011 21:53:37 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Operator-Überladung von &amp;lt; on Fri, 06 May 2011 21:58:22 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18422">@drakon</a><br />
Danke. Ich habs jetzt gemacht, aber etwas scheint noch immer nicht ganz zu stimmen. Ich werds mir dann morgen nochmals genauer anschauen.</p>
<p>@ /rant/<br />
Meinst du einen einen Zeiger auf eine Funktion, die den Vergleich macht, als dritten Parameter zu übergeben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2059821</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2059821</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Fri, 06 May 2011 21:58:22 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Operator-Überladung von &amp;lt; on Fri, 06 May 2011 22:00:50 GMT]]></title><description><![CDATA[<p>Das liegt dann wahrscheinlich wo anders. <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>Er meint damit ein <a href="http://en.wikipedia.org/wiki/Function_object#In_C_and_C.2B.2B" rel="nofollow">Funktionsobjekt</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2059823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2059823</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 06 May 2011 22:00:50 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Operator-Überladung von &amp;lt; on Fri, 06 May 2011 22:05:19 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>std::sort braucht die 2 wertige Variante.</p>
</blockquote>
<p>Nein, sort() ist es egal, wie der Vergleichsoperator definiert ist, solange es dort die sortierten Objekte darin übergeben kann.<br />
Und genau da liegt das Problem - du benötigst einen Vergleichs-Operator für ica::Letter - oder eventuell eine Typumwandlung von ica::Letter nach Node (so daß dein operator anwendbar wird).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2059824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2059824</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 06 May 2011 22:05:19 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Operator-Überladung von &amp;lt; on Fri, 06 May 2011 22:11:45 GMT]]></title><description><![CDATA[<p>@ Drakon<br />
Achso, hatte den Begriff Funktor vergessen. Funktionsobjekt ist klar <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>@ CStoll<br />
Ich könnte mich gerade Ohrfeigen.<br />
Wenn ich einen vector&lt;Letter&gt; sortieren will, dann sollte ich den '&lt;'-Operator auch in Letter und nicht in Node überladen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
Ich habe den Operator jetzt in Letter überladen und alles funktioniert.</p>
<p>Naja, ich habe sehr wenig geschlafen diese Woche ^^</p>
<p>Danke für eure Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2059825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2059825</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Fri, 06 May 2011 22:11:45 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Operator-Überladung von &amp;lt; on Fri, 06 May 2011 22:56:55 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>drakon schrieb:</p>
<blockquote>
<p>std::sort braucht die 2 wertige Variante.</p>
</blockquote>
<p>Nein, sort() ist es egal, wie der Vergleichsoperator definiert ist, solange es dort die sortierten Objekte darin übergeben kann.</p>
</blockquote>
<p>Stimmt. Hab nur zur Sicherheit mal kurz <a href="http://www.cplusplus.com/reference/algorithm/sort/" rel="nofollow">hier</a> geschaut und nur auf das comp Argument geschaut..</p>
<p>Ich geh auch besser schlafen. ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2059832</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2059832</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 06 May 2011 22:56:55 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Operator-Überladung von &amp;lt; on Sat, 07 May 2011 07:57:46 GMT]]></title><description><![CDATA[<p>Wieso schreiben alle C++ in eine .h-Datei? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2059888</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2059888</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sat, 07 May 2011 07:57:46 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Operator-Überladung von &amp;lt; on Sat, 07 May 2011 10:06:06 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<p>Wieso schreiben alle C++ in eine .h-Datei? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
</blockquote>
<p>Gewohnheit <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/2059947</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2059947</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sat, 07 May 2011 10:06:06 GMT</pubDate></item></channel></rss>