Konvertierungskontruktor



  • Hallo,
    Ich habe eine Klasse Bruch und möchte einen Konstruktor realisieren, der int-Zahlen in ein Bruch-Objekt konvertiert.

    class Bruch {
    private:
    int _zaehler;
    int _nenner;
    public:
    Bruch (int zaehler, int nenner) : _zaehler(zaehler), _nenner(nenner) {};
    int zaehler () const {return _zaehler};
    int nenner () const {return _nenner};
    }
    inline Bruch operator* (Bruch a, Bruch b) {
    int zaehler = a.zaehler() * b.zaehler();
    int nenner = a.nenner() * b.nenner();
    Bruch obj (zaehler, nenner);
    return obj;
    }
    

    In der main will ich mithilfe des operators* folgenden Ausdruck berechnen

    int main () {
    Bruch c = 2 * Bruch (14, 5);
    ...
    }
    

    Ich bekomme die Fehlermeldung: no known conversion for argument 1 from 'int' to 'Bruch'.
    2 Bruch Objekte miteinander multiplizieren klappt wunderbar, bloß schaff ich es nicht für Bruch c die 2 mit dem Zaehler 14 zu multiplizieren. Könnt ihr mir bitte helfen?

    Viele Grüße.



  • Der Compiler versucht die Zahl 2 in ein Bruch Objekt zu konvertieren was nicht geht, weil kein geeigneter Konvertierungskonstruktor existiert. Wenn du nur denZähler mit 2 multiplizieren willst dann tu es doch einfach.

    Bruch c =  Bruch (2 * 14, 5);
    

    Hier könnte man natürlich auch gleich den richtigen Konstruktor nehmen.
    Oder du machst es umständlich und wandelst die 2 vorher in eine Bruch um

    Bruch c = Bruch(2,1) * Bruch(14,5);
    

    Oder du schreibst dir einen Konstruktor der ein int übenrimmt für den Zähler. Würde ich aber nicht empfehlen.



  • Oder Du schreibst noch eine operator* - Überladung für (int, Bruch)



  • @exe-Exodia sagte in Konvertierungskontruktor:

    Könnt ihr mir bitte helfen?

    @exe-Exodia sagte in Konvertierungskontruktor:

    : _zaehler(zaehler), _nenner(zaehler)
    

    Nein.



  • @Swordfish Unnötig wie deine Geburt mein Bester.


Anmelden zum Antworten