Typumwandlungskonstruktor funktioniert nicht!



  • High!

    Folgendes Problem:

    Klasse für Bruchzahlen mit (unter anderem)

    class rational
    {
    public:
    rational() // Standard-Konstruktor
    : zaehler(1), nenner(1)
    {}
    rational(long a) // Typumwandlungskonstruktor, ganze Zahl soll in
    // "Eintel"-Bruch umgewandelt werden
    : zaehler(a), nenner(1)
    {}

    ...
    // arithmetische Funktionen

    ...
    void ausgabe() const
    {
    cout << zaehler << "/" << nenner << endl;
    }
    ... // weitere Hilfsfunktionen
    private:
    long zaehler, nenner;
    };

    Trotz Typumwandlungskonstruktor bekomme ich in der main-Funktion bei ausgabe() immer die Fehlermeldung "request for member 'ausgabe' in 'a' (bzw. 'b'), which is of non-aggregate type 'long int'!

    Wie kann das sein?

    Bis bald im Khyberspace!

    Yadgar



  • Kanns sein das du in main sowas machst ?

    long a = 88;
    a.ausgabe();
    

    Dein Typumwandlungkonstruktor bedeuted AFAIK nicht viel mehr, als das bei Parametern von Fuktionen, die per value übergeben werden dieser Konstruktor benutzt wird. Z.B.

    void test(rational test);
    ...
    test(7);
    das entspricht:
    test (rational(7));
    


  • [quote="templäd"]Kanns sein das du in main sowas machst ?

    long a = 88;
    a.ausgabe();
    

    Fast... int main() ruft eine Funktion 'void druckeTestfall(rational a, rational b)' auf, von der aus wiederum die rational-Methode ausgabe() aufgerufen wird...

    ...ich probiere gerade was aus - es lag daran, dass ich, bevor ich den Typumwandlungskonstruktor hinzufügte, die o. g. Funktion druckeTestfall mehrfach für gemischte Datentypen (also rational, long bzw. long, rational) überladen hatte - und die überladenen Versionen bis jetzt nicht gelöscht hatte!

    Trotzdem danke!

    Bis bald im Khyberspace!

    Yadgar


Anmelden zum Antworten