<?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[Fehler bei selbst definierter Klasse, weiß nicht weiter]]></title><description><![CDATA[<p>Hallo,</p>
<p>mein Debugger meckert und ich weiß nicht wieso. Hier die Header:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class Bruch	
{ 
private:
	int m_z;
	int m_n;

public:
	Bruch();
	Bruch(int zaehler, int nenner);
	void eingabe();
	void ausgabe();
	int operator=(Bruch &amp;a, const Bruch &amp;b);
	friend Bruch operator ~(Bruch u);
	friend Bruch operator+(const Bruch &amp;u, const Bruch &amp;v);
	void operator+=(Bruch &amp;f, const Bruch &amp;g);
	friend Bruch operator*(const Bruch &amp;j, const Bruch &amp;k);
	void operator*=(Bruch &amp;d, const Bruch &amp;e);
	friend Bruch operator/(const Bruch &amp;o, const Bruch &amp;r);
	friend Bruch operator-(const Bruch &amp;u, const Bruch &amp;v);
};
</code></pre>
<p>Und die Funktionen.cpp:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;Bruch (decl).h&gt;
using namespace std;

Bruch::Bruch()
:m_z(0), m_n(0)
{};

void Bruch::Bruch(int zaehler, int nenner)  //class::constructor()
:m_z(zaehler), m_n(nenner) 
{};

void Bruch::eingabe()
{cout &lt;&lt; &quot;Zähler:\t&quot;; while(!(cin &gt;&gt; m_z));
 cout&lt;&lt;&quot;\n\nNenner:\t&quot;; while(!(cin &gt;&gt; m_n)); cout &lt;&lt; &quot;\n\n\n&quot;;
};

void Bruch::ausgabe()				    //class::method
{cout &lt;&lt; &quot;\n\nBruch:&quot; &lt;&lt; m_z &lt;&lt; &quot;/&quot; &lt;&lt; m_n &lt;&lt; &quot;=&quot; &lt;&lt; (double) m_z/m_n &lt;&lt; endl;};

int Bruch::operator=(Bruch &amp;a, const Bruch &amp;b)
{
	if (a.m_z=b.m_z &amp;&amp; a.m_n=b.m_n) return EXIT_SUCCESS;
	else							return EXIT_FAILURE;
};

Bruch operator ~(Bruch u) //Kehrwert; muss als friend gelistet sein
{
	return(Bruch(u.m_n, u.m_z)); //”anonyme” Hilfsvar
};
/* Bsp. für Aufruf: Bruch x(1,2), y(3,4); x = ~y 

// → x.m_z=4 //==y.m_n;  
// → x.m_n=3 //==y.m_z   */

Bruch operator+(const Bruch &amp;u, const Bruch &amp;v) //friend Funktion von class Bruch
{
	return(Bruch( (u.m_z*v.m_n)+(u.m_n*v.m_z) , u.m_n*v.m_n) );
};

void Bruch::operator+=(Bruch &amp;f, Bruch const &amp;g) //Methode
{
	f.m_z += g.m_z;
	f.m_n += g.m_n;
};

Bruch operator*(const Bruch &amp;j, const Bruch &amp;k) //friend Funktion von class Bruch
{
	return(Bruch( (j.m_z*k.m_z) , (j.m_n*k.m_n) ));
};

void Bruch::operator*=(Bruch &amp;d, const Bruch &amp;e) //Methode
{
	d.m_z *= e.m_z;
	d.m_n *= e.m_n;
};

Bruch operator/(const Bruch &amp;o, const Bruch &amp;r) //friend Funktion von class Bruch
{
	return(Bruch( (o.m_z*r.m_n) , (o.m_n*r.m_z) ));
};

Bruch operator-(const Bruch &amp;u, const Bruch &amp;v) //friend Funktion von class Bruch
{
	return(Bruch( (u.m_z*v.m_n)-(u.m_n*v.m_z) , u.m_n*v.m_n));
};
</code></pre>
<p>Die Fehlermeldungen lauten bspw.:</p>
<pre><code class="language-cpp">.../Bruch (decl).h:21:0 .../Bruch (decl).h:21: error: 'int Bruch::operator=(Bruch&amp;, const Bruch&amp;)' must take exactly one argument
</code></pre>
<p>//Aber für ne Zuweisung brauche ich doch zwei Exemplare/ Parameter</p>
<pre><code class="language-cpp">/.../Bruch (func).cpp:13:0 .../Bruch (func).cpp:13: error: 'Bruch' has not been declared

.../Bruch (func).cpp:13:0 .../Bruch (func).cpp:13: error: ISO C++ forbids declaration of 'Bruch' with no type

.../Bruch (func).cpp:14:0 .../Bruch (func).cpp:14: error: only constructors take base initializers

.../Bruch (func).cpp:17:0 .../Bruch (func).cpp:17: error: 'Bruch' is not a class or namespace

.../Bruch (func).cpp:22:0 .../Bruch (func).cpp:22: error: 'm_z' was not declared in this scope

.../Bruch (func).cpp:23:0 .../Bruch (func).cpp:23: error: 'm_n' was not declared in this scope

.../Bruch (func).cpp:29:0 .../Bruch (func).cpp:29: error: declaration of 'operator=' as non-function

.../Bruch (func).cpp:29:0 .../Bruch (func).cpp:29: error: 'a' was not declared in this scope

.../Bruch (func).cpp:29:0 .../Bruch (func).cpp:29: error: expected primary-expression before 'const'

.../Bruch (func).cpp:35:0 .../Bruch (func).cpp:35: error: expected constructor, destructor, or type conversion before 'operator'

.../Bruch (func).cpp:44:0 .../Bruch (func).cpp:44: error: expected constructor, destructor, or type conversion before 'operator'
</code></pre>
<p>Und diese scope errors versteh ich auch nicht, habe doch Bruch (decl).h includiert.<br />
Kann mir jemand sagen wo der Haken ist?</p>
<p>Danke<br />
MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/276159/fehler-bei-selbst-definierter-klasse-weiß-nicht-weiter</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 14:02:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/276159.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 27 Oct 2010 18:46:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Fehler bei selbst definierter Klasse, weiß nicht weiter on Wed, 27 Oct 2010 18:46:57 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>mein Debugger meckert und ich weiß nicht wieso. Hier die Header:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class Bruch	
{ 
private:
	int m_z;
	int m_n;

public:
	Bruch();
	Bruch(int zaehler, int nenner);
	void eingabe();
	void ausgabe();
	int operator=(Bruch &amp;a, const Bruch &amp;b);
	friend Bruch operator ~(Bruch u);
	friend Bruch operator+(const Bruch &amp;u, const Bruch &amp;v);
	void operator+=(Bruch &amp;f, const Bruch &amp;g);
	friend Bruch operator*(const Bruch &amp;j, const Bruch &amp;k);
	void operator*=(Bruch &amp;d, const Bruch &amp;e);
	friend Bruch operator/(const Bruch &amp;o, const Bruch &amp;r);
	friend Bruch operator-(const Bruch &amp;u, const Bruch &amp;v);
};
</code></pre>
<p>Und die Funktionen.cpp:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;Bruch (decl).h&gt;
using namespace std;

Bruch::Bruch()
:m_z(0), m_n(0)
{};

void Bruch::Bruch(int zaehler, int nenner)  //class::constructor()
:m_z(zaehler), m_n(nenner) 
{};

void Bruch::eingabe()
{cout &lt;&lt; &quot;Zähler:\t&quot;; while(!(cin &gt;&gt; m_z));
 cout&lt;&lt;&quot;\n\nNenner:\t&quot;; while(!(cin &gt;&gt; m_n)); cout &lt;&lt; &quot;\n\n\n&quot;;
};

void Bruch::ausgabe()				    //class::method
{cout &lt;&lt; &quot;\n\nBruch:&quot; &lt;&lt; m_z &lt;&lt; &quot;/&quot; &lt;&lt; m_n &lt;&lt; &quot;=&quot; &lt;&lt; (double) m_z/m_n &lt;&lt; endl;};

int Bruch::operator=(Bruch &amp;a, const Bruch &amp;b)
{
	if (a.m_z=b.m_z &amp;&amp; a.m_n=b.m_n) return EXIT_SUCCESS;
	else							return EXIT_FAILURE;
};

Bruch operator ~(Bruch u) //Kehrwert; muss als friend gelistet sein
{
	return(Bruch(u.m_n, u.m_z)); //”anonyme” Hilfsvar
};
/* Bsp. für Aufruf: Bruch x(1,2), y(3,4); x = ~y 

// → x.m_z=4 //==y.m_n;  
// → x.m_n=3 //==y.m_z   */

Bruch operator+(const Bruch &amp;u, const Bruch &amp;v) //friend Funktion von class Bruch
{
	return(Bruch( (u.m_z*v.m_n)+(u.m_n*v.m_z) , u.m_n*v.m_n) );
};

void Bruch::operator+=(Bruch &amp;f, Bruch const &amp;g) //Methode
{
	f.m_z += g.m_z;
	f.m_n += g.m_n;
};

Bruch operator*(const Bruch &amp;j, const Bruch &amp;k) //friend Funktion von class Bruch
{
	return(Bruch( (j.m_z*k.m_z) , (j.m_n*k.m_n) ));
};

void Bruch::operator*=(Bruch &amp;d, const Bruch &amp;e) //Methode
{
	d.m_z *= e.m_z;
	d.m_n *= e.m_n;
};

Bruch operator/(const Bruch &amp;o, const Bruch &amp;r) //friend Funktion von class Bruch
{
	return(Bruch( (o.m_z*r.m_n) , (o.m_n*r.m_z) ));
};

Bruch operator-(const Bruch &amp;u, const Bruch &amp;v) //friend Funktion von class Bruch
{
	return(Bruch( (u.m_z*v.m_n)-(u.m_n*v.m_z) , u.m_n*v.m_n));
};
</code></pre>
<p>Die Fehlermeldungen lauten bspw.:</p>
<pre><code class="language-cpp">.../Bruch (decl).h:21:0 .../Bruch (decl).h:21: error: 'int Bruch::operator=(Bruch&amp;, const Bruch&amp;)' must take exactly one argument
</code></pre>
<p>//Aber für ne Zuweisung brauche ich doch zwei Exemplare/ Parameter</p>
<pre><code class="language-cpp">/.../Bruch (func).cpp:13:0 .../Bruch (func).cpp:13: error: 'Bruch' has not been declared

.../Bruch (func).cpp:13:0 .../Bruch (func).cpp:13: error: ISO C++ forbids declaration of 'Bruch' with no type

.../Bruch (func).cpp:14:0 .../Bruch (func).cpp:14: error: only constructors take base initializers

.../Bruch (func).cpp:17:0 .../Bruch (func).cpp:17: error: 'Bruch' is not a class or namespace

.../Bruch (func).cpp:22:0 .../Bruch (func).cpp:22: error: 'm_z' was not declared in this scope

.../Bruch (func).cpp:23:0 .../Bruch (func).cpp:23: error: 'm_n' was not declared in this scope

.../Bruch (func).cpp:29:0 .../Bruch (func).cpp:29: error: declaration of 'operator=' as non-function

.../Bruch (func).cpp:29:0 .../Bruch (func).cpp:29: error: 'a' was not declared in this scope

.../Bruch (func).cpp:29:0 .../Bruch (func).cpp:29: error: expected primary-expression before 'const'

.../Bruch (func).cpp:35:0 .../Bruch (func).cpp:35: error: expected constructor, destructor, or type conversion before 'operator'

.../Bruch (func).cpp:44:0 .../Bruch (func).cpp:44: error: expected constructor, destructor, or type conversion before 'operator'
</code></pre>
<p>Und diese scope errors versteh ich auch nicht, habe doch Bruch (decl).h includiert.<br />
Kann mir jemand sagen wo der Haken ist?</p>
<p>Danke<br />
MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1971680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1971680</guid><dc:creator><![CDATA[bamm]]></dc:creator><pubDate>Wed, 27 Oct 2010 18:46:57 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei selbst definierter Klasse, weiß nicht weiter on Wed, 27 Oct 2010 19:32:09 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;Bruch (decl).h&gt;
</code></pre>
<p>Mach das Leerzeichen raus und nimm &quot;&quot;.</p>
<pre><code class="language-cpp">#include &quot;Bruch.h&quot;
</code></pre>
<p>&quot;&quot; und &lt;&gt; sind 2 unterschiedliche Scopes an Verzeichnissen.</p>
<p>edit:<br />
Die Ausgabe kann man btw schöner machen:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;ostream&gt;

class Bruch
{
public: 
    Bruch() : a(2) {}
    int a;
    friend std::ostream&amp; operator&lt;&lt;(std::ostream&amp; s, Bruch&amp; b);
};

std::ostream&amp; operator&lt;&lt;(std::ostream&amp; s, Bruch&amp; b)
{
   s &lt;&lt; &quot;Ergebnis: &quot; &lt;&lt; b.a;   
   return s;
}

int main()
{ 
    Bruch a;
    std::cout &lt;&lt; a;
}
</code></pre>
<ol start="8">
<li></li>
</ol>
<p>rya.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1971698</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1971698</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Wed, 27 Oct 2010 19:32:09 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei selbst definierter Klasse, weiß nicht weiter on Wed, 27 Oct 2010 21:33:34 GMT]]></title><description><![CDATA[<p>Die Fehlermeldung sagt es schon der Operator = nimmt nur einen Parameter nicht zwei.</p>
<p>Was du eigentlich machen willst ist sowas hier? (Kopieren von Objekten)</p>
<pre><code class="language-cpp">class Bruch{
...
void swap(Bruch&amp; rhs); //tausche *this und rhs Daten
...
};

Bruch&amp; Bruch::operator=(Bruch rhs)
{
swap(rhs);
return *this;
}
</code></pre>
<p>&quot;Pass by Value&quot; kann hier schnell sein als die Alternative:</p>
<pre><code class="language-cpp">Bruch&amp; Bruch::operator=(const Bruch&amp; rhs)
{
Bruch temp(rhs);
swap(temp);
return *this;
}
</code></pre>
<p>EDIT: Was du versucht hast geht so:</p>
<pre><code class="language-cpp">//classA.h
class Bruch
{
public:
	int a;
	int b;

	Bruch(int aa, int bb): a(aa), b(bb){}

	int operator = (const Bruch&amp; rhs);

};

//classA.cpp
#include &quot;classA.h&quot;

int Bruch::operator = (const Bruch&amp; rhs)
{
	if (rhs.a == this-&gt;a &amp;&amp; rhs.b == this-&gt;b) return 1;
	else return 2;
}

//main.cpp
#include &lt;iostream&gt;
#include &quot;classA.h&quot;

using namespace std;

int main()
{
	Bruch a(1,2);
	Bruch b(3,4);
	Bruch c(1,2);

	cout &lt;&lt; (a = b) &lt;&lt; endl;
	cout &lt;&lt; (b = c) &lt;&lt; endl;
	cout &lt;&lt; (c = a) &lt;&lt; endl;

	cin.get();
	cin.get();

	return 0;
}
</code></pre>
<p>Hoffe das hilft cu.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1971747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1971747</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Wed, 27 Oct 2010 21:33:34 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei selbst definierter Klasse, weiß nicht weiter on Wed, 27 Oct 2010 22:02:39 GMT]]></title><description><![CDATA[<blockquote>
<p>Bruch&amp; Bruch::operator=(Bruch x)<br />
{<br />
swap(x)</p>
</blockquote>
<p>swap(x), tausche x WOMIT? Zuweisung ist doch nicht unär ? Irgendwas versteh ich falsch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1971758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1971758</guid><dc:creator><![CDATA[bamm]]></dc:creator><pubDate>Wed, 27 Oct 2010 22:02:39 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei selbst definierter Klasse, weiß nicht weiter on Wed, 27 Oct 2010 22:07:20 GMT]]></title><description><![CDATA[<p>Ich kenne this noch nicht ausreichend, um deinen Code richtig zu verstehen. Setze mich morgen dran.</p>
<p>der letzte post wurde vor deinem edit verfasst, daher hier der Nachtrag..</p>
<p>Gute nacht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1971759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1971759</guid><dc:creator><![CDATA[bamm]]></dc:creator><pubDate>Wed, 27 Oct 2010 22:07:20 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei selbst definierter Klasse, weiß nicht weiter on Thu, 28 Oct 2010 08:03:16 GMT]]></title><description><![CDATA[<p>bamm schrieb:</p>
<blockquote>
<p>Ich kenne this noch nicht ausreichend, um deinen Code richtig zu verstehen. Setze mich morgen dran.</p>
</blockquote>
<p>&quot;this&quot; ist einfach ein Zeiger auf sich selbst (Die Instanz der Klasse). Du kannst this-&gt; auch weglassen, sofern die Bezeichner eindeutig sind.</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">class A
{
    private:
        int a;
    public:
        void test1(int b);
        void test2(int a);
};

void foo()
{
    // foo gehört nicht zu einer Instanz, hat daher kein this.
}

void A::test1(int b)
{
    a = b;
    // oder
    this-&gt;a = b; // a ist eine Instanzvariable, und auch über this-&gt;
                 // erreichbar
}

void A::test2(int a)
{
    // hier überdeckt der Parameter a, den Namen der Instanzvariable,
    // &quot;a&quot; wäre hier der Parameter. Hier benötigst du this-&gt; um eindeutig
    // zu sagen, das du die Instanzvariable meinst.
    this-&gt;a = a;
    //  |     \__ Parameter a
    //  \__ Instanzvariable a
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1971816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1971816</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 28 Oct 2010 08:03:16 GMT</pubDate></item></channel></rss>