<?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überladung in als Member einer Klasse]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe eine Klasse geschrieben die einen enum-Ersatz bieten soll. Zusätzlich gehört zu jeden Typ ein string und ein integer-Bereich. Nun möchte ich den operator== der Klasse so überladen, dass ich sie mit einem int vergleichen kann. Auch möchte ich den operator&lt;&lt; für den stringstream überladen. Ich habe zwar jetzt den Code für die Überladung geschrieben, allerdings behauptet der Compiler standhaft, dass er keine Kandidaten für einen Vergleich mit einem int oder einer Benutzung der Klasse im stringstream findet. Mehr oder weniger hab ich den Verdacht das so ziemlich die meisten Operatoren die versucht habe zu überladen, nicht funktionieren.<br />
Ich hab unten das header-file angehängt, im cpp ist nur die Initialisierung der static Variablen sonst nichts.<br />
Kann mir jemand sagen was ich falsch mache?<br />
Danke,<br />
Andreas</p>
<pre><code class="language-cpp">#include &lt;map&gt;
#include &lt;sstream&gt;
#include &lt;ostream&gt;
#include &lt;string&gt;

class verbose_action {
private:

	enum m_verbose_action{
		m_TRACE_EXECUTION,
		m_TRACE_NUMBER,
		m_INTERRUPT,
                // weitere enums ...
	};

	m_verbose_action m_action;

	string m_action_name;

	static map&lt;string, m_verbose_action&gt; actions;

	verbose_action(m_verbose_action action, char *action_name){
		m_action = action;
		m_action_name = string(action_name);

		actions[m_action_name] = m_action;

	}

public:
	verbose_action(const verbose_action&amp; action):       
                        m_action(action.m_action),
	 		m_action_name(action.m_action_name){}

	string get_string() const {
		return m_action_name;
	}

	verbose_action &amp;operator=(const string &amp;name){
		m_action = actions[name];
		m_action_name = name;
		return *this;
	}

	verbose_action &amp;operator=(char *name){
		m_action = actions[string(name)];
		m_action_name = string(name);
		return *this;
	}

	bool operator==(const verbose_action &amp;action){
		return (m_action == action.m_action);
	}

	ostream &amp;operator&lt;&lt;(ostream &amp;target){
		target &lt;&lt; m_action_name;
		return target;	
	}

	stringstream &amp;operator&lt;&lt;(stringstream &amp;target){
		target &lt;&lt; m_action_name;
		return target;	
	}

	bool operator==(const int&amp; test) const{
		// zum testen soll einfach mal nur true zurück
                // gegeben werden
                return true;	
	}

	static const verbose_action TRACE_EXECUTION;
	static const verbose_action TRACE_NUMBER;
	static const verbose_action INTERRUPT;

};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/120757/operatorüberladung-in-als-member-einer-klasse</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 12:17:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/120757.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 16 Sep 2005 08:15:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Operatorüberladung in als Member einer Klasse on Fri, 16 Sep 2005 08:15:34 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe eine Klasse geschrieben die einen enum-Ersatz bieten soll. Zusätzlich gehört zu jeden Typ ein string und ein integer-Bereich. Nun möchte ich den operator== der Klasse so überladen, dass ich sie mit einem int vergleichen kann. Auch möchte ich den operator&lt;&lt; für den stringstream überladen. Ich habe zwar jetzt den Code für die Überladung geschrieben, allerdings behauptet der Compiler standhaft, dass er keine Kandidaten für einen Vergleich mit einem int oder einer Benutzung der Klasse im stringstream findet. Mehr oder weniger hab ich den Verdacht das so ziemlich die meisten Operatoren die versucht habe zu überladen, nicht funktionieren.<br />
Ich hab unten das header-file angehängt, im cpp ist nur die Initialisierung der static Variablen sonst nichts.<br />
Kann mir jemand sagen was ich falsch mache?<br />
Danke,<br />
Andreas</p>
<pre><code class="language-cpp">#include &lt;map&gt;
#include &lt;sstream&gt;
#include &lt;ostream&gt;
#include &lt;string&gt;

class verbose_action {
private:

	enum m_verbose_action{
		m_TRACE_EXECUTION,
		m_TRACE_NUMBER,
		m_INTERRUPT,
                // weitere enums ...
	};

	m_verbose_action m_action;

	string m_action_name;

	static map&lt;string, m_verbose_action&gt; actions;

	verbose_action(m_verbose_action action, char *action_name){
		m_action = action;
		m_action_name = string(action_name);

		actions[m_action_name] = m_action;

	}

public:
	verbose_action(const verbose_action&amp; action):       
                        m_action(action.m_action),
	 		m_action_name(action.m_action_name){}

	string get_string() const {
		return m_action_name;
	}

	verbose_action &amp;operator=(const string &amp;name){
		m_action = actions[name];
		m_action_name = name;
		return *this;
	}

	verbose_action &amp;operator=(char *name){
		m_action = actions[string(name)];
		m_action_name = string(name);
		return *this;
	}

	bool operator==(const verbose_action &amp;action){
		return (m_action == action.m_action);
	}

	ostream &amp;operator&lt;&lt;(ostream &amp;target){
		target &lt;&lt; m_action_name;
		return target;	
	}

	stringstream &amp;operator&lt;&lt;(stringstream &amp;target){
		target &lt;&lt; m_action_name;
		return target;	
	}

	bool operator==(const int&amp; test) const{
		// zum testen soll einfach mal nur true zurück
                // gegeben werden
                return true;	
	}

	static const verbose_action TRACE_EXECUTION;
	static const verbose_action TRACE_NUMBER;
	static const verbose_action INTERRUPT;

};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/873446</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873446</guid><dc:creator><![CDATA[kalkproduzent]]></dc:creator><pubDate>Fri, 16 Sep 2005 08:15:34 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung in als Member einer Klasse on Fri, 16 Sep 2005 08:30:04 GMT]]></title><description><![CDATA[<p>soll der ausgabetext zu m_TRACE_EXECUTION auch &quot;TRACE_EXECUTION&quot; heißen?<br />
wenn ja, schlage ich doch dringlich einen kick-delete-createnew-zyklus mit macro-art remebering vor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/873459</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873459</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 16 Sep 2005 08:30:04 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung in als Member einer Klasse on Fri, 16 Sep 2005 08:38:02 GMT]]></title><description><![CDATA[<p>Ja so ist es. Aber ich habe keine Ahnung was ein: &quot;kick-delete-createnew-zyklus mit macro-art remebering&quot; ist.<br />
Aber viel dringlicher ist die Operatorüberladung weil ich die Klasse leider vorschnell im ganzen Source eingesetzt habe und nun gar nichts mehr geht!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/873466</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873466</guid><dc:creator><![CDATA[kalkproduzent]]></dc:creator><pubDate>Fri, 16 Sep 2005 08:38:02 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung in als Member einer Klasse on Fri, 16 Sep 2005 08:50:36 GMT]]></title><description><![CDATA[<p>kalkproduzent schrieb:</p>
<blockquote>
<p>Ja so ist es. Aber ich habe keine Ahnung was ein: &quot;kick-delete-createnew-zyklus mit macro-art remebering&quot; ist.</p>
</blockquote>
<p>ich muss jetzt weg. es wird anderen wie TGGC eine freude sein, dir bei der verbesserung der klasse behilfreich zu sein.</p>
<blockquote>
<p>Aber viel dringlicher ist die Operatorüberladung weil ich die Klasse leider vorschnell im ganzen Source eingesetzt habe und nun gar nichts mehr geht!!</p>
</blockquote>
<p>ungetestet:</p>
<pre><code class="language-cpp">friend bool operator==(verbose_action const&amp; a,verbose_action const&amp; b){
		return a.m_action == action.m_action;
	}
	friend bool operator==(verbose_action const&amp; a,int b){
		return int(a.m_action) == action.m_action;
	}
	friend bool operator==(int a,verbose_action const&amp; b){
		return a.m_action == int(action.m_action);
	}

	friend ostream &amp;operator&lt;&lt;(ostream &amp;target,verbose_action a){
		target &lt;&lt; a.m_action_name;
		return target;	
	}

	//stringstream &amp;operator&lt;&lt;(stringstream &amp;target)//weg, ist ja schon in ostream
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/873471</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873471</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 16 Sep 2005 08:50:36 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung in als Member einer Klasse on Fri, 16 Sep 2005 10:23:53 GMT]]></title><description><![CDATA[<p>Danke! Das funktioniert super, jetzt würde ich mich aber auch noch über eine Erklärung freuen, warum meine Version der Operatorüberladung nicht funktioniert!</p>
<p>Über das &quot;kick-delete-createnew-zyklus mit macro-art remebering&quot; würde ich natürlich auch noch gerne aufgeklärt werden. <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/873573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873573</guid><dc:creator><![CDATA[kalkproduzent]]></dc:creator><pubDate>Fri, 16 Sep 2005 10:23:53 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung in als Member einer Klasse on Fri, 16 Sep 2005 10:34:54 GMT]]></title><description><![CDATA[<p>kalkproduzent schrieb:</p>
<blockquote>
<p>Danke! Das funktioniert super, jetzt würde ich mich aber auch noch über eine Erklärung freuen, warum meine Version der Operatorüberladung nicht funktioniert!</p>
</blockquote>
<p>Bei den Streamoperatoren muss der Stream der linke Operand sein, und das auszugebende Objekt der rechte. Bei Memberoperatoren ist aber immer die enthaltende Klasse der linke Operand.</p>
<p>Du Vergleichsoperatoren sollten als Member const sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/873582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873582</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Fri, 16 Sep 2005 10:34:54 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung in als Member einer Klasse on Fri, 16 Sep 2005 15:36:33 GMT]]></title><description><![CDATA[<p>kalkproduzent schrieb:</p>
<blockquote>
<p>Über das &quot;kick-delete-createnew-zyklus mit macro-art remebering&quot; würde ich natürlich auch noch gerne aufgeklärt werden. <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>
</blockquote>
<p>das heißt nur, daß ich vorschlage, den kram wegzuwerfen, zu löschen, neu zu schreiben und dabei sich an die kunst der makro-programmierung zu erinnern. könnte sein, daß es dann fast genausogut wird aber deutlich einfacher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/873791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873791</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 16 Sep 2005 15:36:33 GMT</pubDate></item></channel></rss>