<?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[C++ Anfänger Operatoren-Überladen]]></title><description><![CDATA[<p>Hallo Leute!</p>
<p>Ich bin noch ein C++ Anfänger und beschäftige mich gerade mit dem Überladen von Operatoren. In meinem Programm handelt es sich um Brüche und für diese wollte ich einige Operatoren überladen. Nun bekomme ich jedoch folgende Fehlermeldung, mit der ich nichts anzufangen weiss:</p>
<p>Fraction.cpp:28:56: Fehler: Die �bergabe von �const Fraction� als �this�-Argument von �int Fraction::getNumerator()� streicht Qualifizierer [-fpermissive]</p>
<p>Fraction.cpp:29:60: Fehler: Die �bergabe von �const Fraction� als �this�-Argument von �int Fraction::getDenominator()� streicht Qualifizierer [-fpermissive]</p>
<p>Hier ist meine Header-Datei</p>
<pre><code class="language-cpp">/* 
 * File:   Fraction.h
 * Author: Xarsis
 *
 * Created on 24. Juni 2012, 15:48
 */

#ifndef FRACTION_H
#define	FRACTION_H

#include &lt;iostream&gt;

using namespace std;

class Fraction {
public:
    Fraction();
    Fraction(int numerator, int denominator);
    int getNumerator();
    int getDenominator();
    Fraction operator*(const Fraction&amp; rhs);
    void operator&lt;&lt;(const Fraction&amp; fraction);
private:
    int numerator;
    int denominator;
};

#endif	/* FRACTION_H */
</code></pre>
<p>und hier meine .cpp</p>
<pre><code class="language-cpp">/* 
 * File:   Fraction.cpp
 * Author: Xarsis
 *
 * Created on 24. Juni 2012, 15:48
 */

#include &quot;Fraction.h&quot;

Fraction::Fraction() {

}

Fraction::Fraction(int numerator, int denominator) {
    this-&gt;numerator = numerator;
    this-&gt;denominator = denominator;
}

int Fraction::getNumerator() {
    return this-&gt;numerator;
}

int Fraction::getDenominator() {
    return this-&gt;denominator;
}

Fraction Fraction::operator*( const Fraction&amp; rhs) {
    Fraction result(this-&gt;numerator * rhs.getNumerator(),
                    this-&gt;denominator * rhs.getDenominator());
    return result;
}

void Fraction::operator &lt;&lt;(const Fraction&amp; fraction) {
    cout &lt;&lt; fraction.getNumerator() &lt;&lt; &quot; / &quot; &lt;&lt; fraction.getDenominator();
}
</code></pre>
<p>Vielen Dank schonmal für die Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/305290/c-anfänger-operatoren-überladen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 09 Aug 2026 01:15:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/305290.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 25 Jun 2012 16:58:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to C++ Anfänger Operatoren-Überladen on Mon, 25 Jun 2012 17:00:22 GMT]]></title><description><![CDATA[<p>Hallo Leute!</p>
<p>Ich bin noch ein C++ Anfänger und beschäftige mich gerade mit dem Überladen von Operatoren. In meinem Programm handelt es sich um Brüche und für diese wollte ich einige Operatoren überladen. Nun bekomme ich jedoch folgende Fehlermeldung, mit der ich nichts anzufangen weiss:</p>
<p>Fraction.cpp:28:56: Fehler: Die �bergabe von �const Fraction� als �this�-Argument von �int Fraction::getNumerator()� streicht Qualifizierer [-fpermissive]</p>
<p>Fraction.cpp:29:60: Fehler: Die �bergabe von �const Fraction� als �this�-Argument von �int Fraction::getDenominator()� streicht Qualifizierer [-fpermissive]</p>
<p>Hier ist meine Header-Datei</p>
<pre><code class="language-cpp">/* 
 * File:   Fraction.h
 * Author: Xarsis
 *
 * Created on 24. Juni 2012, 15:48
 */

#ifndef FRACTION_H
#define	FRACTION_H

#include &lt;iostream&gt;

using namespace std;

class Fraction {
public:
    Fraction();
    Fraction(int numerator, int denominator);
    int getNumerator();
    int getDenominator();
    Fraction operator*(const Fraction&amp; rhs);
    void operator&lt;&lt;(const Fraction&amp; fraction);
private:
    int numerator;
    int denominator;
};

#endif	/* FRACTION_H */
</code></pre>
<p>und hier meine .cpp</p>
<pre><code class="language-cpp">/* 
 * File:   Fraction.cpp
 * Author: Xarsis
 *
 * Created on 24. Juni 2012, 15:48
 */

#include &quot;Fraction.h&quot;

Fraction::Fraction() {

}

Fraction::Fraction(int numerator, int denominator) {
    this-&gt;numerator = numerator;
    this-&gt;denominator = denominator;
}

int Fraction::getNumerator() {
    return this-&gt;numerator;
}

int Fraction::getDenominator() {
    return this-&gt;denominator;
}

Fraction Fraction::operator*( const Fraction&amp; rhs) {
    Fraction result(this-&gt;numerator * rhs.getNumerator(),
                    this-&gt;denominator * rhs.getDenominator());
    return result;
}

void Fraction::operator &lt;&lt;(const Fraction&amp; fraction) {
    cout &lt;&lt; fraction.getNumerator() &lt;&lt; &quot; / &quot; &lt;&lt; fraction.getDenominator();
}
</code></pre>
<p>Vielen Dank schonmal für die Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227094</guid><dc:creator><![CDATA[Xarsis]]></dc:creator><pubDate>Mon, 25 Jun 2012 17:00:22 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Anfänger Operatoren-Überladen on Mon, 25 Jun 2012 17:11:24 GMT]]></title><description><![CDATA[<p>Du warst nicht konsequent mit der const-correctness. const ist ansteckend. Deine Getter müssen sich noch anstecken, wenn du sie in anderen const-Memberfunktionen benutzen möchtest.</p>
<p>P.S.: Du weißt, dass du das this-&gt; nicht brauchst? Bist du auch sicher, dass der leere Konstruktor tut, was du möchtest? Derzeit ermöglicht er das uninitialisierte erstellen von Objekten deiner Klasse, obwohl deine Klasse anscheindend doch initialisiert erstellt werden möchte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227099</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 25 Jun 2012 17:11:24 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Anfänger Operatoren-Überladen on Mon, 25 Jun 2012 17:17:14 GMT]]></title><description><![CDATA[<p>Ich glaub du hast da ein paar const vergessen.</p>
<pre><code class="language-cpp">int getNumerator() const {return numerator;}
int getDenominator() const {return denominator;}
</code></pre>
<p>ansonsten:<br />
schau dir mal die Initialisierungsliste an.</p>
<p>PS: using namespace std; gehört nicht in den header.</p>
<p>gruß<br />
syntax</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227100</guid><dc:creator><![CDATA[Syntax_error]]></dc:creator><pubDate>Mon, 25 Jun 2012 17:17:14 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Anfänger Operatoren-Überladen on Mon, 25 Jun 2012 17:52:28 GMT]]></title><description><![CDATA[<p>Hey danke für eure Antworten!<br />
Habe das mit dem *operator jetzt hinbekommen mit dem const. Für den &lt;&lt;operator muss ich nochmal schauen, da hatte ich glaub schon einen total falschen Ansatz. Laut Internet wird das mit ostream gemacht. Aber nun ja da werd ich mich nochmal dran setzen.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a><br />
Ja der leere Konstruktor war in diesem Fall so gewollt und das mit dem this-&gt; weiss ich zwar das ich es auch weg lassen könnte aber mir wurde geraten das so zu machen, damit ich auch gleich sehe das ich auf Sachen zugreiff in dem Objekt indem ich mich befinde. Aber mir fällt grad auf würde das denn in meinem überladenen Konstruktor funktionieren wenn man da schreibt: numerator = numerator ? Woher weiss denn dann der Compiler was gemeint ist? Auf jeden nochmal danke für die Hilfe!</p>
<p>@Syntax<br />
Auch dir ein Dankeschön!! Wieso gehört der namespace std nicht in den Header? Hätte ich eine Methode die ich sag mal string oder ostream zurückgeben würde und ich hätte alles included dann brauch ich doch den namespace std sonst würde er meinen string oda ostream nicht erkennen oder sehe ich da was falsch?</p>
<p>MfG Xarsis</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227112</guid><dc:creator><![CDATA[Xarsis]]></dc:creator><pubDate>Mon, 25 Jun 2012 17:52:28 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Anfänger Operatoren-Überladen on Mon, 25 Jun 2012 18:40:41 GMT]]></title><description><![CDATA[<p>Xarsis schrieb:</p>
<blockquote>
<p>Aber mir fällt grad auf würde das denn in meinem überladenen Konstruktor funktionieren wenn man da schreibt: numerator = numerator ? Woher weiss denn dann der Compiler was gemeint ist?</p>
</blockquote>
<p>Da hast du recht, darum macht man so was:</p>
<pre><code class="language-cpp">private:
    int a;        //auch schon gesehen: _a, _b
    int b;
public:
    Classenname(int aa, int bb) : a(aa), b(bb) {}
</code></pre>
<p>Ich mache eigentlich nit this-&gt;.</p>
<p>Xarsis schrieb:</p>
<blockquote>
<p>Für den &lt;&lt;operator muss ich nochmal schauen, da hatte ich glaub schon einen total falschen Ansatz. Laut Internet wird das mit ostream gemacht.</p>
</blockquote>
<p>Ja der ist doch schon überladen:</p>
<pre><code class="language-cpp">std::ostream&amp; operator &lt;&lt;(std::ostream&amp; rhs, T&amp; lhs);  //T steht fuer deinen Datentyp
</code></pre>
<p>Xarsis schrieb:</p>
<blockquote>
<p>Wieso gehört der namespace std nicht in den Header?</p>
</blockquote>
<p>Weil es zu Problemen führen kann. Es gibt alternativen:</p>
<pre><code class="language-cpp">using std::cout;
using std::cin;
cout&lt;&lt;...;
cin&gt;&gt;...;
</code></pre>
<p>oder:</p>
<pre><code class="language-cpp">std::cout&lt;&lt;...;
std::cin&gt;&gt;...;
</code></pre>
<p>gruß<br />
syntax</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227126</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227126</guid><dc:creator><![CDATA[Syntax_error]]></dc:creator><pubDate>Mon, 25 Jun 2012 18:40:41 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Anfänger Operatoren-Überladen on Mon, 25 Jun 2012 18:57:28 GMT]]></title><description><![CDATA[<p>Hab das mit dem &lt;&lt;operator noch nicht ganz hinbekommen.<br />
Man muss den &lt;&lt;operator doch als globale Funktion machen, weil meine links Seite vom Operator ja kein Mitglied meiner Klasse ist. Also hab ich das jetzt so geschrieben, was jedoch auch nicht funktioniert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f622.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--crying_face"
      title=":'("
      alt="😢"
    /></p>
<p>Der Fehler ist:</p>
<p>Fraction.cpp:33:63: Fehler: �std::ostream&amp; Fraction::operator&lt;&lt;(std::ostream&amp;, const Fraction&amp;)� muss genau ein Argument nehmen</p>
<p>Header</p>
<pre><code class="language-cpp">/* 
 * File:   Fraction.h
 * Author: Xarsis
 *
 * Created on 24. Juni 2012, 15:48
 */

#ifndef FRACTION_H
#define	FRACTION_H

#include &lt;iostream&gt;
#include &lt;ostream&gt;

class Fraction {
public:
    Fraction();
    Fraction(int numerator, int denominator);
    int getNumerator() const;
    int getDenominator() const;
    Fraction operator*(const Fraction&amp; rhs);
private:
    int numerator;
    int denominator;
};

std::ostream&amp; operator&lt;&lt;(std::ostream &amp;os, const Fraction &amp;rhs);

#endif	/* FRACTION_H */
</code></pre>
<p>CPP</p>
<pre><code class="language-cpp">/* 
 * File:   Fraction.cpp
 * Author: Xarsis
 *
 * Created on 24. Juni 2012, 15:48
 */

#include &quot;Fraction.h&quot;

using namespace std;

Fraction::Fraction() {

}

Fraction::Fraction(int numerator, int denominator) {
    this-&gt;numerator = numerator;
    this-&gt;denominator = denominator;
}

int Fraction::getNumerator() const {
    return this-&gt;numerator;
}

int Fraction::getDenominator() const {
    return this-&gt;denominator;
}

Fraction Fraction::operator*(const Fraction&amp; rhs) {
    Fraction result(this-&gt;numerator * rhs.getNumerator(),
            this-&gt;denominator * rhs.getDenominator());
    return result;
}

ostream&amp; Fraction::operator&lt;&lt;(ostream &amp;os, const Fraction&amp; rhs) {
    return os &lt;&lt; rhs.getNumerator() &lt;&lt; &quot; / &quot; &lt;&lt; rhs.getDenominator();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2227134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227134</guid><dc:creator><![CDATA[Xarsis]]></dc:creator><pubDate>Mon, 25 Jun 2012 18:57:28 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Anfänger Operatoren-Überladen on Mon, 25 Jun 2012 20:04:44 GMT]]></title><description><![CDATA[<p>Schau mal in Zeile 26, da steht die operator-funktion ausserhalb deiner Klasse, aber schreibst in Zeile 35 Fraction::operator&lt;&lt;//...</p>
<p>Du musst diese Funktion als friend deklarieren, wenn du sie in die Klasse packst.</p>
<pre><code class="language-cpp">friend std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, Fraction&amp; rhs);
</code></pre>
<pre><code class="language-cpp">std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, Fraction% rhs){

//Das hier stimmt bei dir
}
</code></pre>
<p>Ansonste hier ein guter tut.<br />
<a href="http://www.c-plusplus.net/forum/232010" rel="nofollow">http://www.c-plusplus.net/forum/232010</a></p>
<p>gruß<br />
syntax</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227174</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227174</guid><dc:creator><![CDATA[Syntax_error]]></dc:creator><pubDate>Mon, 25 Jun 2012 20:04:44 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Anfänger Operatoren-Überladen on Tue, 26 Jun 2012 09:31:07 GMT]]></title><description><![CDATA[<p>Vielen Dank nochmal Syntax! Es funktioniert jetzt alles! Ja ist auch irgendwie logisch das das Fraction:: in der CPP dann weg muss, wenn es kein Mitglied der klasse mehr ist, aber da wär ich in 100 Jahren nicht drauf gekommen! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Der Tut-Thread ist ja auch sehr genial danke dafür !</p>
<p>MfG Xarsis</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227281</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227281</guid><dc:creator><![CDATA[Xarsis]]></dc:creator><pubDate>Tue, 26 Jun 2012 09:31:07 GMT</pubDate></item></channel></rss>