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.