<?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[Zuweisungsoperator als member]]></title><description><![CDATA[<p>Hallo!</p>
<p>Habe folgende Klasse:</p>
<pre><code>template &lt;typename TValue, typename TPred = std::less&lt;TValue&gt; &gt;
class BinarySearchTree {

	struct TNode {
		TValue value;
		TNode *pLeft;
		TNode *pRight;
	};

public:

	BinarySearchTree();
	BinarySearchTree(BinarySearchTree&lt;TValue, TPred&gt; const &amp;tree);
	BinarySearchTree&lt;TValue, TPred&gt; &amp;operator=(BinarySearchTree&lt;TValue, TPred&gt; const &amp;tree);
	~BinarySearchTree();

	bool Insert(TValue const &amp;value); // returns false if already contained

	template &lt;typename TVisitor&gt; void VisitPreOrder(TVisitor visitor) const;
	template &lt;typename TVisitor&gt; void VisitInOrder(TVisitor visitor) const;
	template &lt;typename TVisitor&gt; void VisitPostOrder(TVisitor visitor) const;

private:
	TNode *pRoot;

...

	template &lt;typename TVisitor&gt; void VisitInOrder  (TVisitor visitor, TNode const * const pRoot) const;
...

	// ... helper methods ...
};
</code></pre>
<p>(die schnittstelle darf nicht geändert werden)<br />
wenn ich die operatorüberladung so mache (genau wie im ctor), dann:</p>
<pre><code>if (this != &amp;tree) 
                {
		tree.VisitInOrder(Insert);
		}
	return *this;	//Referenz auf das Objekt selbst
</code></pre>
<p>schreit der compiler:<br />
[quote]</p>
<blockquote>
<p>Error 1 error C3867: 'BinarySearchTree&lt;TValue&gt;::Insert': function call missing argument list; use '&amp;BinarySearchTree&lt;TValue&gt;::Insert' to<br />
create a pointer to member 70<br />
Error 2 error C2780: 'void BinarySearchTree&lt;TValue&gt;::VisitInOrder(TVisitor,const BinarySearchTree&lt;TValue&gt;::TNode *const ) const' : expects 2 arguments - 1 provided 70</p>
</blockquote>
<p>luat googlesuche hat das anscheiend was mit binary, unary zum tun, aber ich weiß nicht wieso und ich weiß nicht wie ich das ändern muss<br />
daher brauche ich wieder einaml eure hilfe</p>
<p>mfg<br />
ACnut</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/317452/zuweisungsoperator-als-member</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Jul 2026 22:04:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/317452.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 09 Jun 2013 14:16:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zuweisungsoperator als member on Sun, 09 Jun 2013 14:16:20 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Habe folgende Klasse:</p>
<pre><code>template &lt;typename TValue, typename TPred = std::less&lt;TValue&gt; &gt;
class BinarySearchTree {

	struct TNode {
		TValue value;
		TNode *pLeft;
		TNode *pRight;
	};

public:

	BinarySearchTree();
	BinarySearchTree(BinarySearchTree&lt;TValue, TPred&gt; const &amp;tree);
	BinarySearchTree&lt;TValue, TPred&gt; &amp;operator=(BinarySearchTree&lt;TValue, TPred&gt; const &amp;tree);
	~BinarySearchTree();

	bool Insert(TValue const &amp;value); // returns false if already contained

	template &lt;typename TVisitor&gt; void VisitPreOrder(TVisitor visitor) const;
	template &lt;typename TVisitor&gt; void VisitInOrder(TVisitor visitor) const;
	template &lt;typename TVisitor&gt; void VisitPostOrder(TVisitor visitor) const;

private:
	TNode *pRoot;

...

	template &lt;typename TVisitor&gt; void VisitInOrder  (TVisitor visitor, TNode const * const pRoot) const;
...

	// ... helper methods ...
};
</code></pre>
<p>(die schnittstelle darf nicht geändert werden)<br />
wenn ich die operatorüberladung so mache (genau wie im ctor), dann:</p>
<pre><code>if (this != &amp;tree) 
                {
		tree.VisitInOrder(Insert);
		}
	return *this;	//Referenz auf das Objekt selbst
</code></pre>
<p>schreit der compiler:<br />
[quote]</p>
<blockquote>
<p>Error 1 error C3867: 'BinarySearchTree&lt;TValue&gt;::Insert': function call missing argument list; use '&amp;BinarySearchTree&lt;TValue&gt;::Insert' to<br />
create a pointer to member 70<br />
Error 2 error C2780: 'void BinarySearchTree&lt;TValue&gt;::VisitInOrder(TVisitor,const BinarySearchTree&lt;TValue&gt;::TNode *const ) const' : expects 2 arguments - 1 provided 70</p>
</blockquote>
<p>luat googlesuche hat das anscheiend was mit binary, unary zum tun, aber ich weiß nicht wieso und ich weiß nicht wie ich das ändern muss<br />
daher brauche ich wieder einaml eure hilfe</p>
<p>mfg<br />
ACnut</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2329626</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2329626</guid><dc:creator><![CDATA[ACnut]]></dc:creator><pubDate>Sun, 09 Jun 2013 14:16:20 GMT</pubDate></item><item><title><![CDATA[Reply to Zuweisungsoperator als member on Sun, 09 Jun 2013 14:41:40 GMT]]></title><description><![CDATA[<p>Soll vermutlich soetwas wie</p>
<pre><code class="language-cpp">tree.VisitInOrder(std::bind(&amp;BinarySearchTree::Insert,this,std::placeholders::_1));
</code></pre>
<p>sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2329630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2329630</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 09 Jun 2013 14:41:40 GMT</pubDate></item><item><title><![CDATA[Reply to Zuweisungsoperator als member on Sun, 09 Jun 2013 14:45:20 GMT]]></title><description><![CDATA[<p>wow es funktioniert.<br />
aber wieso was tu ich da wie genau funktioniert dieses bind? und wodurch wird placeholder ersetzt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2329633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2329633</guid><dc:creator><![CDATA[ACnut]]></dc:creator><pubDate>Sun, 09 Jun 2013 14:45:20 GMT</pubDate></item><item><title><![CDATA[Reply to Zuweisungsoperator als member on Sun, 09 Jun 2013 15:34:02 GMT]]></title><description><![CDATA[<p>Die Funktion erwartet eine aufrufbare Einheit. Mit der macht die so etwas:</p>
<pre><code>visitor(some_value);
</code></pre>
<p>, vermute ich.<br />
Du übergibst ihr eine Memberfunktion.<br />
Eine Memberfunktion kann man aber nicht wie oben aufrufen, sondern man muss</p>
<pre><code>objekt.visitor(some_value);
</code></pre>
<p>schreiben.<br />
Jetzt kann man aber zum Glück tricksen. Eine Memberfunktion erwartet nämlich intern an erster Stelle einen Zeiger auf ein Objekt - den this-Zeiger.<br />
std::bind() nimmt sich nun die Memberfunktion und liefert ein Funktionsobjekt zurück.<br />
Die Funktion erwartet zwei Argumente und liefert bool zurück - an das erste Objekt ist allerdings fest das aktuelle Objekt gebunden, an das zweite nur ein Platzhalter, d.h., dass man den operator() mit nur einem Argument aufrufen kann, nämlich dem, wo der Platzhalter ist. Deshalb ist der erstgenannate Aufruf gültig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2329638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2329638</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sun, 09 Jun 2013 15:34:02 GMT</pubDate></item><item><title><![CDATA[Reply to Zuweisungsoperator als member on Sun, 09 Jun 2013 16:11:08 GMT]]></title><description><![CDATA[<p>kannst du mir bitte das mit dem platzhalter noch einmal genauer erkären bzw. das hier:</p>
<blockquote>
<p>dass man den operator() mit nur einem Argument aufrufen kann, nämlich dem, wo der Platzhalter ist.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2329650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2329650</guid><dc:creator><![CDATA[ACnut]]></dc:creator><pubDate>Sun, 09 Jun 2013 16:11:08 GMT</pubDate></item><item><title><![CDATA[Reply to Zuweisungsoperator als member on Sun, 09 Jun 2013 16:19:05 GMT]]></title><description><![CDATA[<p>Der Platzhalter gibt einfach nur an, welche Argumente der Funktion auch wirklich variabel bleiben und an den operator() übergeben werden müssen.<br />
Beispiele:</p>
<pre><code>void func(int a, int b) {...}

// kein bind
func(5, 2); // 2 Argumente

auto f1 = std::bind(func, std::placeholders::_1, std::placeholders::_2); // zwei Platzahler
f1(5, 2); // 2 Argumente

auto f2 = std::bind(func, 1, std::placeholders::_1) // Argument a vorbelegt, b Platzhalter
f2(2); // 1 Argument, a = 1, b = 2

auto f3 = std::bind(func, std::placeholders::_1, 1) // Argument b vorbelegt, a Platzhalter
f3(5); // 1 Argument, a = 5, b = 1

auto f4 = std::bind(func, 1, 2); // alles
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2329653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2329653</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sun, 09 Jun 2013 16:19:05 GMT</pubDate></item><item><title><![CDATA[Reply to Zuweisungsoperator als member on Sun, 09 Jun 2013 16:26:34 GMT]]></title><description><![CDATA[<p>ok verstehe, durch das od eoben erhalten wir daher eine unäre funktion<br />
vielen vielen dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2329658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2329658</guid><dc:creator><![CDATA[ACnut]]></dc:creator><pubDate>Sun, 09 Jun 2013 16:26:34 GMT</pubDate></item></channel></rss>