Warum geht der double-Konstruktor nicht?



  • Wenn ich einen double-Wert als Variable übergebe, sagt der Compiler folgendes:

    error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall Fraction::Fraction(double)" (??0Fraction@@QAE@N@Z)" in Funktion "_main".
    fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
    
    #include <iostream>
    #include <cstdlib>
    using namespace std;
    class Fraction
    {
    private: long zaehler, nenner;
    
    public:
    	Fraction(long z, long n);
    	Fraction(double x);			// double-Konstruktor
    	//Default- long- und int-Konstruktor:
    	Fraction(long z=0) : zaehler(z), nenner(1) {}
    	Fraction(int z) : zaehler(z), nenner(1) {}
    	void kuerzen();
    	operator double()		// Fraction -> double
    	{
    		return (double)zaehler / (double)nenner;
    	}
    	Fraction operator-() const
    	{
    		return Fraction(-zaehler, nenner);
    	}
    	Fraction& operator+=(const Fraction& a)
    	{
    		zaehler = a.zaehler * nenner + zaehler * a.nenner;
    		nenner *= a.nenner;
    		return *this;
    	}
    
    };
    
    int main()
    {
    
    	Fraction fu(5), pu(-8), mu(32.53);
    	fu += pu;
    	cout << fu << endl;
    	system("pause");
    }
    


  • Und wo ist die Implementierung des Double-Konstruktors?



  • Weil Du den Konstruktor nicht definiert hast.



  • Die verschiedenen Konstruktoren sind m.E. sowieso unnötig, da

    Fraction(long z=0, long n=1) : zaehler(z), nenner(n) {}
    

    reichen würde (mehr als die implizite Konvertierung wird ja auch nicht gemacht).



  • Th69 schrieb:

    Die verschiedenen Konstruktoren sind m.E. sowieso unnötig, da

    Fraction(long z=0, long n=1) : zaehler(z), nenner(n) {}
    

    reichen würde (mehr als die implizite Konvertierung wird ja auch nicht gemacht).

    Ja, es war nur eine Übung mit verschiedenen Konstruktoren. Zum testen.

    @Belli: Stimmt, hatte ich übersehen.


Anmelden zum Antworten