<?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[Klasse Bruch]]></title><description><![CDATA[<p>Hallo!<br />
Ich habe mit folgendem Code ein Problem:</p>
<pre><code class="language-cpp">//Bruchneu.h

#ifndef Bruchneu_h___
#define Bruchneu_h___

#include &lt;iostream&gt;

class Bruch
{
      long zaehler_;
      long nenner_;
public:
       Bruch(long z=0, long n=1);
       Bruch(const Bruch &amp; a);
       ~Bruch();

       long getZaehler() const{return zaehler_;}
       long getNenner() const{return nenner_;}

       Bruch operator +(const Bruch &amp; a) const;
       friend std:: ostream &amp; operator &lt;&lt;(std::ostream &amp; os, const Bruch &amp; a);
};

#endif
</code></pre>
<pre><code class="language-cpp">//Bruchneu.cpp

#include &lt;iostream&gt;
#include &quot;Bruchneu.h&quot;
#include &quot;kgV_ggt.h&quot;

using namespace std;

int main()
{
    long z, n;
    cout &lt;&lt; &quot;erste Bruch: &quot; &lt;&lt; endl;
    cin &gt;&gt;z; //zaehler
    cin &gt;&gt;n; //nenner
    Bruch myBruch(z,n);
    cout &lt;&lt;myBruch&lt;&lt; endl;

    cout &lt;&lt; &quot;zweiter Bruch: &quot; &lt;&lt; endl;
    cin &gt;&gt;z;
    cin &gt;&gt;n;
    Bruch myBruch2(z,n);
    cout &lt;&lt;myBruch2&lt;&lt; endl;
    cout &lt;&lt;&quot;Das Ergebnis ist: &quot; &lt;&lt;endl;

    cout &lt;&lt;myBruch+myBruch2&lt;&lt;endl;
}

/==============================================================================

Bruch::Bruch (long z, long n)
{
    if(n==0)
    {
        cout &lt;&lt; &quot;Nenner=0 ungueltig&quot; &lt;&lt; endl;
        n&gt;1;
        //throw 1;
    }
    if (z==0) //Zaehler=0
    {
        zaehler_=0;
        nenner_=1;
    }
    else
    {
        long t=ggT(z,n);
        zaehler_= z/t;
        nenner_= n/t;
        if (nenner_&lt;0)
        {
            zaehler_= -zaehler_;
            nenner_= -nenner_;
        }
    }
}
//==============================================================================

Bruch::Bruch(const Bruch &amp; a): zaehler_ (a.zaehler_), nenner_(a.nenner_)
{
}

//==============================================================================

Bruch Bruch::operator+(const Bruch &amp; a) const
{
    long n=kgV(nenner_, a.nenner_);
    long z= (n/nenner_)*zaehler_+(n/a.nenner_)*a.zaehler_;
    return Bruch(z,n);
}

//==============================================================================

std::ostream &amp; operator &lt;&lt;(std::ostream &amp; os, const Bruch &amp; a)
{
    os &lt;&lt; a.zaehler_;
    if (a.nenner_!= 1)
        os &lt;&lt; '/' &lt;&lt; a.nenner_;
    return os;
}
</code></pre>
<p>Leider bekomme ich dann eine Fehlermeldung:</p>
<p>[Linker error] undefined reference to 'Bruch::~Bruch()'<br />
more undefined references to 'Bruch::~Bruch()' follow<br />
ld returned 1 exit status<br />
Build Error][Bruchneu.exe]Error 1</p>
<p>Ich weiß irgendwie nicht mehr weiter und habe keine Ahnung wo der Fehler liegen könnte. Das Programm stimmt bis auf die main-Funktion direkt mit dem überein, was wir in der Vorlesung durchgenommen haben.</p>
<p>Ich danke euch schon mal im Voraus für eure Bemühungen.<br />
lg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/299108/klasse-bruch</link><generator>RSS for Node</generator><lastBuildDate>Thu, 13 Aug 2026 11:59:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/299108.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 02 Feb 2012 19:30:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klasse Bruch on Thu, 02 Feb 2012 19:30:52 GMT]]></title><description><![CDATA[<p>Hallo!<br />
Ich habe mit folgendem Code ein Problem:</p>
<pre><code class="language-cpp">//Bruchneu.h

#ifndef Bruchneu_h___
#define Bruchneu_h___

#include &lt;iostream&gt;

class Bruch
{
      long zaehler_;
      long nenner_;
public:
       Bruch(long z=0, long n=1);
       Bruch(const Bruch &amp; a);
       ~Bruch();

       long getZaehler() const{return zaehler_;}
       long getNenner() const{return nenner_;}

       Bruch operator +(const Bruch &amp; a) const;
       friend std:: ostream &amp; operator &lt;&lt;(std::ostream &amp; os, const Bruch &amp; a);
};

#endif
</code></pre>
<pre><code class="language-cpp">//Bruchneu.cpp

#include &lt;iostream&gt;
#include &quot;Bruchneu.h&quot;
#include &quot;kgV_ggt.h&quot;

using namespace std;

int main()
{
    long z, n;
    cout &lt;&lt; &quot;erste Bruch: &quot; &lt;&lt; endl;
    cin &gt;&gt;z; //zaehler
    cin &gt;&gt;n; //nenner
    Bruch myBruch(z,n);
    cout &lt;&lt;myBruch&lt;&lt; endl;

    cout &lt;&lt; &quot;zweiter Bruch: &quot; &lt;&lt; endl;
    cin &gt;&gt;z;
    cin &gt;&gt;n;
    Bruch myBruch2(z,n);
    cout &lt;&lt;myBruch2&lt;&lt; endl;
    cout &lt;&lt;&quot;Das Ergebnis ist: &quot; &lt;&lt;endl;

    cout &lt;&lt;myBruch+myBruch2&lt;&lt;endl;
}

/==============================================================================

Bruch::Bruch (long z, long n)
{
    if(n==0)
    {
        cout &lt;&lt; &quot;Nenner=0 ungueltig&quot; &lt;&lt; endl;
        n&gt;1;
        //throw 1;
    }
    if (z==0) //Zaehler=0
    {
        zaehler_=0;
        nenner_=1;
    }
    else
    {
        long t=ggT(z,n);
        zaehler_= z/t;
        nenner_= n/t;
        if (nenner_&lt;0)
        {
            zaehler_= -zaehler_;
            nenner_= -nenner_;
        }
    }
}
//==============================================================================

Bruch::Bruch(const Bruch &amp; a): zaehler_ (a.zaehler_), nenner_(a.nenner_)
{
}

//==============================================================================

Bruch Bruch::operator+(const Bruch &amp; a) const
{
    long n=kgV(nenner_, a.nenner_);
    long z= (n/nenner_)*zaehler_+(n/a.nenner_)*a.zaehler_;
    return Bruch(z,n);
}

//==============================================================================

std::ostream &amp; operator &lt;&lt;(std::ostream &amp; os, const Bruch &amp; a)
{
    os &lt;&lt; a.zaehler_;
    if (a.nenner_!= 1)
        os &lt;&lt; '/' &lt;&lt; a.nenner_;
    return os;
}
</code></pre>
<p>Leider bekomme ich dann eine Fehlermeldung:</p>
<p>[Linker error] undefined reference to 'Bruch::~Bruch()'<br />
more undefined references to 'Bruch::~Bruch()' follow<br />
ld returned 1 exit status<br />
Build Error][Bruchneu.exe]Error 1</p>
<p>Ich weiß irgendwie nicht mehr weiter und habe keine Ahnung wo der Fehler liegen könnte. Das Programm stimmt bis auf die main-Funktion direkt mit dem überein, was wir in der Vorlesung durchgenommen haben.</p>
<p>Ich danke euch schon mal im Voraus für eure Bemühungen.<br />
lg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2176151</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2176151</guid><dc:creator><![CDATA[e.kerstin91]]></dc:creator><pubDate>Thu, 02 Feb 2012 19:30:52 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse Bruch on Thu, 02 Feb 2012 19:35:13 GMT]]></title><description><![CDATA[<p>Du sagst in Zeile 15 (erste Datei), dass du einen eigenen Destruktor definieren möchtest (wozu überhaupt? Cargo-Cult?), daher generiert der Compiler in Zeile 26 (zweite Datei), wo er den Destruktor braucht, keinen eigenen Destruktor. Da du diesen eigenen Destruktor nirgends definierst, wird er dann am Ende vom Linker vergeblich gesucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2176154</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2176154</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 02 Feb 2012 19:35:13 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse Bruch on Thu, 02 Feb 2012 19:42:41 GMT]]></title><description><![CDATA[<p>Habe jetzt den Destruktor gelöscht und es funktioniert.</p>
<p>Ich habe den Destruktor nicht in Frage gestellt, weil wir dieses Programm auf der Uni genau mit diesem Destruktor durchgeführt haben. Da war es aber anscheinend kein Problem.</p>
<p>Aber immerhin klappt es jetzt. <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="🙂"
    /> Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2176155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2176155</guid><dc:creator><![CDATA[e.kerstin91]]></dc:creator><pubDate>Thu, 02 Feb 2012 19:42:41 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse Bruch on Thu, 02 Feb 2012 19:57:10 GMT]]></title><description><![CDATA[<p>e.kerstin91 schrieb:</p>
<blockquote>
<p>Ich habe den Destruktor nicht in Frage gestellt, weil wir dieses Programm auf der Uni genau mit diesem Destruktor durchgeführt haben. Da war es aber anscheinend kein Problem.</p>
</blockquote>
<p>Hmmm, AFAIK IB. Wenn du in bei manchen Compilern nicht definierst, wird er zum default.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2176165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2176165</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 02 Feb 2012 19:57:10 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse Bruch on Thu, 02 Feb 2012 21:18:04 GMT]]></title><description><![CDATA[<p>Hacker schrieb:</p>
<blockquote>
<p>Hmmm, AFAIK IB. Wenn du in bei manchen Compilern nicht definierst, wird er zum default.</p>
</blockquote>
<p>Nein, total definiertes Verhalten. Wenn du selber einen Destruktor definierst kann und darf ein Compiler keinen eigenen erzeugen. Wenn du keinen definierst und es wird einer gebraucht, dann muss ein Compiler einen eigenen nach genau vorgegebenen Regeln erzeugen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2176207</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2176207</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 02 Feb 2012 21:18:04 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse Bruch on Thu, 02 Feb 2012 21:22:40 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Wenn du selber einen Destruktor de<strong>finierst</strong> kann und darf ein Compiler keinen eigenen erzeugen.</p>
</blockquote>
<p>Es gibt übrigens einen Unterschied zwischen deklarieren und definieren. Ich meine, wenn man ihn deklariert. Aber ich weiß, dass du auch so Recht hast <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="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2176210</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2176210</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 02 Feb 2012 21:22:40 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse Bruch on Thu, 02 Feb 2012 21:28:27 GMT]]></title><description><![CDATA[<p>Hacker schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Wenn du selber einen Destruktor de<strong>finierst</strong> kann und darf ein Compiler keinen eigenen erzeugen.</p>
</blockquote>
<p>Es gibt übrigens einen Unterschied zwischen deklarieren und definieren. Ich meine, wenn man ihn deklariert. Aber ich weiß, dass du auch so Recht hast <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="😃"
    /></p>
</blockquote>
<p>Wenn du ihn definierst, dann musst du ihn vorher deklarieren. Wenn du ihn deklarierst, dann wird davon ausgegangen, dass du ihn auch definierst. Genau das ist hier nicht geschehen, daher der Fehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2176214</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2176214</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 02 Feb 2012 21:28:27 GMT</pubDate></item></channel></rss>