Fehler bei Überladung
lima-city → Forum → Programmiersprachen → C/C++ und D
abziehen
bibliothek
code
differenz
double
einbinden
ersten blick
fehler
funktion
funktioniert folgendes beispiel
grund
klasse
null
operator
packen
problem
sagen
typ
versuch
verzichten
-
Ich schreibe derzeit in C++ einige Komfortfunktionen, um sie in meine deutschsprachige Befehlsmakrobibliothek einbinden zu können, doch jetzt bin ich auf ein Problem gestoßen, das ich noch nicht kenne.
Ich möchte, dass man die Klassen time_t mit Operanden so abziehen kann, dass die Differenz als Double herausgegeben wird. Ungünstigerweise kenne ich mich mit dem Überladen noch nicht so gut aus, was auch der Grund dafür ist, dass ich mir eine Ersatzklasse für time_t geschrieben habe. Ich möchte idealerweise darauf verzichten.
Aber warum funktioniert folgendes Beispiel nicht?
#include <iostream.h> #include <time.h> class zeit { public: time_t wert; zeit &operator=(const time_t &z) { wert = z; return *this; }; double operator-(zeit) { return 3; }; }; int main(void) { zeit z1 = time(NULL); // Angeblich uneindeutige Überladung zeit z2 = time(NULL); // s.o. double a = z1 - z2; }
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Erstmal vorn weg als kleiner Tipp: Wenn du sagst es funktioniert nicht, dann solltest du dazu schreiben, auf welche weise es nicht funktioniert bzw. fehlerausgaben des Compilers dazu packen, falls es welche gibt.
Ansonsten kann ich auf den ersten Blick nur sagen, dass der operator - zwar eine typ übergeben bekommt, den er entgegen nimmt aber der typ hat in der funktion keinen Variablennamen. Ich vermute mal, dass es dieser Fehler ist, den du meinst.
Zum Thema Überladung. Du könntest natürlich eine Funktion difftime schreiben, die dir die Differenz zweier time_t's ausgibt aber einen operator - so zu überladen, dass er zwei time_t's entgegennimmt geht wahrscheinlich nicht. Zumindest die Standarddatentypen wie int,char und co. kannst du nicht überladen. Bei time_t bin ich mir nicht sicher, da es erst durch eine Bibliothek reinkommt. Es wäre einen Versuch wert folgendes zu schreiben:
double operator-(const time_t a, const time_t b) { return (long)a-(long)b; }
Aber ich garantiere für nichts
Beitrag zuletzt geändert: 1.7.2010 22:10:17 von sektor -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage