000
14.09.2006, 14:26 Uhr
Yadgar
|
High!
Mal wieder mit "FractInt" zugange, diesmal soll von Fractint eine abgeleitete Klasse "NamedFractInt" gebildet werden und für diese Klasse der bereits in FractInt vorhandene Additionsoperator verwendet werden (Martin AUPPERLE, Die Kunst der Programmierung mit C++, S. 692ff).
Hier die Definitionen der Klassen:
1. FractInt:
C++: |
class FractInt { private: int mZaehler, mNenner; // Zähler und Nenner mutable bool mValid; // Cache-Implementierung mutable double mValue; // Cache-Inhalt public: FractInt(); // Standardkonstruktor FractInt(int aZaehler, int aNenner=1); // Allgemeiner Konstruktor FractInt(const FractInt& aFI); // Kopierkonstruktor /* weitere Funktionen, hier nicht relevant */ FractInt operator + (FractInt aF2); // Addition /* weitere Operatoren und Funktionen, hier nicht relevant */ };
|
2. NamedFractInt:
C++: |
class NamedFractInt : public FractInt { public: friend NamedFractInt operator + (const NamedFractInt&, const NamedFractInt&); NamedFractInt(string aName, int aZaehler, int aNenner=1); // Allgemeiner Konstruktor NamedFractInt (const FractInt& aF); // Spezial-Konstruktor für // Typwandlung FractInt -> NamedFractInt operator string() const; // Implizite Wandlung in String private: string mName; };
|
schließlich die globale friend-Operatorfunktion +:
C++: |
NamedFractInt operator + (const NamedFractInt& lhs, const NamedFractInt& rhs) { FractInt result = static_cast<const FractInt&> (lhs) + static_cast<const FractInt&> (rhs); return NamedFractInt(lhs.mName + rhs.mName, result.mZaehler, result.mNenner); }
|
...und für diese Funktion wird mir bei jedem Versuch, zwei NamedFractInt-Objekte zu addieren, folgende Fehlermeldung angezeigt:
ambiguous overload for 'operator+' in '(const FractInt&((const FractInt*)(+lhs)) + (const FractInt&((const FractInt*)(+rhs))'
Wieso FractInt*? Soweit ich sehe, habe ich nirgendwo versehentlich ein Feld aus FracInts angelegt...
Bis bald im Khyberspace!
Yadgar -- Flagmaker - ein Programmier-Blog |