Fehlermeldung bei Funktionsaufruf



  • Ich habe eine Klasse für Brüche, die ich gern um eine Funktion für das Kürzen erweitern möchte. In nachfolgendem Programmfragment wird aber ein Fehler an der angegebenen Stelle verursacht. Kann mir jemand sagen, was ich ändern muss? Danke.

    void fraction::kuerzen(long zaehler, long nenner)
    {
    	long z, m = zaehler, n = nenner;
    	while(n > 0)
    	{
    		z = n;
    		n = m % n;
    		m = z; //m ist jetzt der Hauptnenner
    	}
    	m_zaehler /= m;
    	m_nenner /= m;
    }
    
    fraction operator+(const fraction& a, const fraction& b)
    {
    	fraction temp;
    	temp.m_zaehler = a.m_zaehler * b.m_nenner + b.m_zaehler * a.m_nenner;
    	temp.m_nenner = a.m_nenner * b.m_nenner;
    
    	//hier Fehlermeldung: "Unzulaessiger Aufruf einer nicht statischen Member-Funktion"
    	fraction::kuerzen(temp.m_zaehler, temp.m_nenner);
    
    	return temp;
    }
    


  • Deine Methode void fraction::kuerzen ist NICHT statisch, d.h. du kannst sie nicht über den Klassennamen (fraction::kurzen) aufrufen. Stattdessen musst du sie über ein Objekt der Klasse aufrufen also z.B. so:

    temp.kurzen( ... )

    BTW finde ich deinen Code etwas unglücklich. Ich halte es für überflüssig, dass du der Methode kurzen Parameter übergibst. Die Methode kurzen soll ja die Member des Objektes kürzen! mach kuerzen besser private und ruf die Methode am Ende deiner Konstruktoren auf. So ist sichergestellt, dass sich eiN Bruch immer im gekürzten Zustand befindet...



  • @interpreter@noPassword:

    erstmal Danke!! Zumindest läuft das Programm jetzt.

    BTW: Wenn ich den Gleichheitszeichen-Operator überladen will, so etwa:

    friend fraction operator= (const fraction&, const fraction&);
    

    dann erhalte ich diese Fehlermeldung:

    Operator '=' muss ein <unbekannt>-Element sein
    

    Was will mir der Compiler damit sagen und wie stelle ich es ab?
    Danke.



  • bird schrieb:

    @interpreter@noPassword:

    erstmal Danke!! Zumindest läuft das Programm jetzt.

    BTW: Wenn ich den Gleichheitszeichen-Operator überladen will, so etwa:

    friend fraction operator= (const fraction&, const fraction&);
    

    dann erhalte ich diese Fehlermeldung:

    Operator '=' muss ein <unbekannt>-Element sein
    

    Was will mir der Compiler damit sagen und wie stelle ich es ab?
    Danke.

    Den Zuweisungsoperator kannst du nicht global definieren. Den Zuweisungsoperator MUSST du als Memberfunktion definiern ⚠
    Also: friend weg, 2. Übergabeparameter weg, Deklaration in deine Klassendeklaration (und am besten ne nichtkonstante Referenz auf fraction zurückgeben), dann gehts 😉


Anmelden zum Antworten