<?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[Problem mit Relation-Überladung]]></title><description><![CDATA[<p>Hallo,</p>
<p>folgendes Problem, um die Größe 2 Ascii-Bilder anhand ihrer Reihenanzahl vergleichen zu können möchte ich eine Relation wie &quot;&gt;&quot; überladen.</p>
<p>Meine Klasse besitzt bereits eine Funktion zum Auslesen der Zeilenanzahl:</p>
<pre><code class="language-cpp">size_type get_row()const{return lines.size();}
</code></pre>
<p>Laut Dozent soll man eine Relationen so überladen:</p>
<pre><code class="language-cpp">inline bool operator&gt; (const X&amp; lhs, const X&amp; rhs) {return operator&lt; (rhs,lhs);}
</code></pre>
<p>für meine Klasse habe ich diese Funktion daraus folgend so deklariert:</p>
<pre><code class="language-cpp">inline bool operator&gt; (const AsciiPicture&amp; lhs, const AsciiPicture&amp; rhs);
</code></pre>
<p>Und in meiner CPP-Datei, welche die Klassse includiert die Funktion folgt definiert:</p>
<pre><code class="language-cpp">bool AsciiPicture::operator&gt; (const AsciiPicture&amp; lhs, const AsciiPicture&amp; rhs) 
{
	return operator&lt; (rhs-&gt;lines.size(), lhs-&gt;lines.size());
}
</code></pre>
<p>Ansich erscheint das für mich als logisch, jedoch bekomme ich dann die Fehlermeldung, das schon die Deklaration in der Klasse, welche ja eine binäre Relation ist, zuviele Parameter enthält.. jedoch habe ich nur rhs und lhs.</p>
<p>nach einingen rumprobieren habe ich rausgefunden, dass wenn ich die Deklaration statt &quot;inline&quot; als &quot;friend&quot; mache dieses Problem nicht mehr auftritt.. jedoch bekomme ich dann sehr viele Probleme mit meiner Definition in der CPP-Datei..</p>
<p>los gehts mit:</p>
<p>error C2039: '&gt;' : is not a member of 'AsciiPicture'</p>
<p>error C2819: type 'AsciiPicture' does not have an overloaded member 'operator -&gt;' : see declaration of 'AsciiPicture' did you intend to use '.' instead?</p>
<p>error C2232: '-&gt;AsciiPicture::lines' : left operand has 'class' type, use '.'</p>
<p>error C2228: left of '.size' must have class/struct/union</p>
<p>usw.. und sofort <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Wo liegt der Fehler? Ich kanns einfach nicht finden..</p>
<p>Vielen Dank schonmal..</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/169560/problem-mit-relation-überladung</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 17:38:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/169560.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 06 Jan 2007 13:28:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Relation-Überladung on Sat, 06 Jan 2007 13:30:37 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>folgendes Problem, um die Größe 2 Ascii-Bilder anhand ihrer Reihenanzahl vergleichen zu können möchte ich eine Relation wie &quot;&gt;&quot; überladen.</p>
<p>Meine Klasse besitzt bereits eine Funktion zum Auslesen der Zeilenanzahl:</p>
<pre><code class="language-cpp">size_type get_row()const{return lines.size();}
</code></pre>
<p>Laut Dozent soll man eine Relationen so überladen:</p>
<pre><code class="language-cpp">inline bool operator&gt; (const X&amp; lhs, const X&amp; rhs) {return operator&lt; (rhs,lhs);}
</code></pre>
<p>für meine Klasse habe ich diese Funktion daraus folgend so deklariert:</p>
<pre><code class="language-cpp">inline bool operator&gt; (const AsciiPicture&amp; lhs, const AsciiPicture&amp; rhs);
</code></pre>
<p>Und in meiner CPP-Datei, welche die Klassse includiert die Funktion folgt definiert:</p>
<pre><code class="language-cpp">bool AsciiPicture::operator&gt; (const AsciiPicture&amp; lhs, const AsciiPicture&amp; rhs) 
{
	return operator&lt; (rhs-&gt;lines.size(), lhs-&gt;lines.size());
}
</code></pre>
<p>Ansich erscheint das für mich als logisch, jedoch bekomme ich dann die Fehlermeldung, das schon die Deklaration in der Klasse, welche ja eine binäre Relation ist, zuviele Parameter enthält.. jedoch habe ich nur rhs und lhs.</p>
<p>nach einingen rumprobieren habe ich rausgefunden, dass wenn ich die Deklaration statt &quot;inline&quot; als &quot;friend&quot; mache dieses Problem nicht mehr auftritt.. jedoch bekomme ich dann sehr viele Probleme mit meiner Definition in der CPP-Datei..</p>
<p>los gehts mit:</p>
<p>error C2039: '&gt;' : is not a member of 'AsciiPicture'</p>
<p>error C2819: type 'AsciiPicture' does not have an overloaded member 'operator -&gt;' : see declaration of 'AsciiPicture' did you intend to use '.' instead?</p>
<p>error C2232: '-&gt;AsciiPicture::lines' : left operand has 'class' type, use '.'</p>
<p>error C2228: left of '.size' must have class/struct/union</p>
<p>usw.. und sofort <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Wo liegt der Fehler? Ich kanns einfach nicht finden..</p>
<p>Vielen Dank schonmal..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1204258</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1204258</guid><dc:creator><![CDATA[travelflo22]]></dc:creator><pubDate>Sat, 06 Jan 2007 13:30:37 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Relation-Überladung on Sat, 06 Jan 2007 13:46:03 GMT]]></title><description><![CDATA[<p>travelflo22 schrieb:</p>
<blockquote>
<p>Ansich erscheint das für mich als logisch, jedoch bekomme ich dann die Fehlermeldung, das schon die Deklaration <strong>in</strong> der Klasse, welche ja eine binäre Relation ist, zuviele Parameter enthält.. jedoch habe ich nur rhs und lhs.</p>
</blockquote>
<p>Wenn du die Funktion so deklarieren/definieren willt, musst du das <strong>außerhalb</strong> der Klassendefinition tun. Ansonsten darf der Operator nur ein Argument übernehmen, da der Operator sonst ja keine einfache Funktion, sondern eine Methode ist, deren erstes Argument automatisch die jeweilige Instanz ist.</p>
<p>Außerdem hift es wahrscheinich nicht so viel, den größer Operator über den kleiner Operator zu implementieren, jedenfalls nur, wenn du den kleiner Operator schon überladen hast <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>Also entweder du machst es so:</p>
<pre><code class="language-cpp">class X
{
    public:
    bool operator&gt; (const X&amp; rhs) {return operator&lt; (rhs,*this);}
};
</code></pre>
<p>oder so:</p>
<pre><code class="language-cpp">class X
{
    //...
};

bool operator&gt; (const X&amp; lhs, const X&amp; rhs) {return operator&lt; (rhs,lhs);}
</code></pre>
<p>Zustätzlich musst du dann natürlich noch den kleiner operator überladen, und zwar <strong>nicht</strong> indem du den größer Operator verwendest <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>Felix :xmas2:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1204269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1204269</guid><dc:creator><![CDATA[Phoemuex]]></dc:creator><pubDate>Sat, 06 Jan 2007 13:46:03 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Relation-Überladung on Sat, 06 Jan 2007 14:56:02 GMT]]></title><description><![CDATA[<p>travelflo22 schrieb:</p>
<blockquote>
<p>Laut Dozent soll man eine Relationen so überladen:</p>
<pre><code class="language-cpp">inline bool operator&gt; (const X&amp; lhs, const X&amp; rhs) {return operator&lt; (rhs,lhs);}
</code></pre>
</blockquote>
<p>Das Zurückführen ist mit Sicherheit eine gute Idee, aber bei dieser Syntax ist es kein Wunder, wenn du Schwierigkeiten hast, das Konzept zu erkennen. Der Sinn von Operatorüberladung ist die Vereinfachung von Syntax. Wir definieren einen Operator x um schreiben zu können:<br />
a x b<br />
und nicht<br />
operator x(a,b)<br />
zumal beide nicht ganz äquivalent sind, denn Letzteres erzwingt die Implementation außerhalb der Klasse.</p>
<p>Richtig also:</p>
<pre><code class="language-cpp">inline bool operator&gt; (const X&amp; lhs, const X&amp; rhs) {return rhs&lt;lhs;}
</code></pre>
<p>Der Operator wird also auf einen <em>anderen</em> Operator <em>mit denselben Operanden</em> zurückgeführt, nur dass diese Operanden vertauscht sind. Das ist das, was in deiner Implementation verlorengegangen ist. Damit eine solche Zurückführung möglich ist, muss dieser andere Operator natürlich ebenfalls existieren, den musst du also auch noch schreiben. Der Vorteil ist aber, dass nur einer dieser Operatoren tatsächlich etwas Interessantes macht. Alle anderen können dagegen rein schematisch implementiert werden, was der Korrektheit zugute kommt. Wenn du sicher bist, das der eine interessante Operator funktioniert, weißt du sofort, dass das auch für die anderen gilt.<br />
Es ist üblich, Relationen vom kleiner-als-Operator ausgehend zu implemnentieren. Zwingend ist das nicht, hat allerdings eine lange Tradition.</p>
<p>Dein Compiler beschwert sich im Übrigen nicht darüber sondern über die Verwendung des -&gt; Operators anstelle des Punkt-Operators, Ersterer ist für Pointer gedacht und müsste für Klassen erst überladen werden, was hier nicht sinnvoll sein dürfte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1204352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1204352</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 06 Jan 2007 14:56:02 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Relation-Überladung on Sat, 06 Jan 2007 15:25:07 GMT]]></title><description><![CDATA[<p>Aber genau mit lsh und rsh, sprich 2 Paramtern funktioniert es nicht innerhalb der Klasse... das ist ja das Problem.. sollte ich es außerhalb der Klasse implementieren? Aber wie sieht dann die Deklaration aus? Weil dann deklariere ich wieder 2 Parameter und es geht wiederholt nicht... <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/1204376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1204376</guid><dc:creator><![CDATA[travelflo22]]></dc:creator><pubDate>Sat, 06 Jan 2007 15:25:07 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Relation-Überladung on Sat, 06 Jan 2007 15:42:38 GMT]]></title><description><![CDATA[<p>Ich bin nun soweit gekommen:</p>
<pre><code class="language-cpp">public:

AsciiPicture();

//Ermitteln der Anzahl der Zeilen
size_type get_row()const{return lines.size();}

inline bool operator &lt; (const AsciiPicture&amp; rhs)const
	{
		return rhs.get_row().operator &lt; (*this.get_row());
	}
</code></pre>
<p>egibt 4 fehler:</p>
<p>error C2228: left of '.&lt;' must have class/struct/union type is 'AsciiPicture::size_type'</p>
<p>error C2228: left of '.get_row' must have class/struct/union<br />
type is 'const AsciiPicture *const '<br />
did you intend to use '-&gt;' instead?</p>
<p>und nochmal die 2 Fehler... dabei habe ich doch eingentlich soweit alles beachtet, was oben geschrieben wurde.. hmmmm <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/1204390</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1204390</guid><dc:creator><![CDATA[travelflo22]]></dc:creator><pubDate>Sat, 06 Jan 2007 15:42:38 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Relation-Überladung on Sat, 06 Jan 2007 15:46:58 GMT]]></title><description><![CDATA[<p>Das kommt halt davon wenn man elitär sein will.<br />
Der einfache Weg ist der bessere:</p>
<pre><code class="language-cpp">bool operator &lt; (const AsciiPicture&amp; rhs)const
{
   return getRow() &lt; rhs.getRow();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1204395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1204395</guid><dc:creator><![CDATA[lolz]]></dc:creator><pubDate>Sat, 06 Jan 2007 15:46:58 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Relation-Überladung on Sat, 06 Jan 2007 15:58:21 GMT]]></title><description><![CDATA[<p>Danke...</p>
<p>ps: ich will gar nichts sein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
<p>Nur so ganz nachvollziehen kann iches noch nicht.. zum Verständnis.. Ich habe 2 Objekte der Klasse, da die Implementierung innerhalb der Klasse steht ist sie quasi schon das eine Objekt auf sich bezogen, und wird verglichen mit dem 2. Objekt namens rhs.. ist das korrekt so?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1204399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1204399</guid><dc:creator><![CDATA[travelflo22]]></dc:creator><pubDate>Sat, 06 Jan 2007 15:58:21 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Relation-Überladung on Sat, 06 Jan 2007 16:03:14 GMT]]></title><description><![CDATA[<p>Exakt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1204411</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1204411</guid><dc:creator><![CDATA[lolz]]></dc:creator><pubDate>Sat, 06 Jan 2007 16:03:14 GMT</pubDate></item></channel></rss>