xxxbolsbluexxx Geschrieben 19. Juni 2009 Geschrieben 19. Juni 2009 Mein Compiler gibt folgende Meldung aus... duration.hh:59: Fehler: expected constructor, destructor, or type conversion before »&« token duration.hh:60: Fehler: expected constructor, destructor, or type conversion before »&« token duration.cc:57: Fehler: expected constructor, destructor, or type conversion before »&« token duration.cc:63: Fehler: expected constructor, destructor, or type conversion before »&« token Meine Header Datei (duration.hh) #ifndef DURATION_HH #define DURATION_HH class Duration{ ...unwichtig ;-) }; // E/A Operatoren ostream& operator<<(ostream& outStream, Duration value); // Das ist Zeile 59 istream& operator>>(istream& inStream, Duration& duration); // Das ist Zeile 60 #endif Und die Definition (duration.cc) const char IO_SEPERATOR = ';'; ostream& operator<<(ostream& outStream, Duration value){ //Zeile 57 outStream << value.hours() << IO_SEPERATOR << value.minutes() << IO_SEPERATOR << value.seconds(); return outStream; } istream& operator>>(istream& inStream, Duration& duration){ //Zeile 63 int hours; int minutes; int seconds; char seperator; inStream >> hours >> seperator >> minutes >> seperator >> seconds; duration = Duration(hours, minutes, seconds); return inStream; } Wieso kann ich den Operator nicht überladen? ... Seht ihr i-wo einen Fehler? Das überladen von operator+ und operator- klappt wunderbar, aber hier bekomme ich den besagten Fehler :-( Sind die Deklaration und Definition an den richtgen Stellen??? Hoffe ihr könnt mir helfen... MFG xxxbolsbluexxx Zitieren
Klotzkopp Geschrieben 19. Juni 2009 Geschrieben 19. Juni 2009 Wahrscheinlich sind an dieser Stelle std::ostream und std::istream nicht bekannt. Im Header wäre es sowieso besser, den Namensraum voll zu qualifizieren. Ansonsten brauchst du entweder eine using-Direktive im Header (schlechte Idee), oder die einbindende Quellcodedatei muss eine solche enthalten (noch schlechtere Idee). Zitieren
xxxbolsbluexxx Geschrieben 19. Juni 2009 Autor Geschrieben 19. Juni 2009 (bearbeitet) Wahrscheinlich sind an dieser Stelle std::ostream und std::istream nicht bekannt. Eine einbindung von <iostream> reicht da doch aus, oder verwechsel ich was? Und wie genau meinst du das mit: Im Header wäre es sowieso besser, den Namensraum voll zu qualifizieren. Ich glaube ich verstehe dich nicht ganz... die Wörter sind mir alle ein Begriff, aber ich kann mir keine Lösung daraus bilden... Bin ziemlich neu bei C++ Also generell Programmierung ;-) Daher noch ein bisschen --> :confused: Bearbeitet 19. Juni 2009 von xxxbolsbluexxx Zitieren
Klotzkopp Geschrieben 19. Juni 2009 Geschrieben 19. Juni 2009 Eine einbindung von <iostream> reicht da doch aus, oder verwechsel ich was?Das reicht, aber die Klassen sind im Namensraum std. Du musst da also schon std::istream und std::ostream hinschreiben. Ich glaube ich verstehe dich nicht ganz... die Wörter sind mir alle ein Begriff, aber ich kann mir keine Lösung daraus bilden... Bin ziemlich neu bei C++ Also generell ProgrammierungUnd dann gleich Operatorüberladung? Das ist nicht gerade ein Einsteigerthema. Du hast nicht den ganzen Code gezeigt. Ich habe vermutet, dass da irgendwo eine using-Direktive steckt: using namespace std;Mit dieser Direktive sollte dein Code funktionieren, wenn <iostream> eingebunden ist. Allerdings ist das keine gute Idee. Es ist besser, wenn du den voll qualifizierten Namen hinschreibst (also mit std:. Zitieren
xxxbolsbluexxx Geschrieben 19. Juni 2009 Autor Geschrieben 19. Juni 2009 :eek Ok, danke... Ich weiss jetzt wo der Fehler war ;-) std::ostream& operator<<([COLOR="Red"]std::[/COLOR]ostream& outStream, Duration value) Hab den zweiten auflösungsoperator vergessen Danke für die Hilfe Zitieren
xxxbolsbluexxx Geschrieben 20. Juni 2009 Autor Geschrieben 20. Juni 2009 (bearbeitet) Also so klappt das übersetzen und auch mein Testprogramm funktioniert einwandfrei: // E/A Operatoren const char IO_SEPERATOR = ':'; [COLOR="Red"]std::[/COLOR]ostream& [COLOR="Red"]std::[/COLOR]operator<<([COLOR="Red"]std::[/COLOR]ostream& outStream, Duration value){ outStream << value.hours() << IO_SEPERATOR << value.minutes() << IO_SEPERATOR << value.seconds(); return outStream; } [COLOR="Red"]std::[/COLOR]istream& [COLOR="Red"]std::[/COLOR]operator>>([COLOR="Red"]std::[/COLOR]istream& inStream, Duration& duration){ int hours; int minutes; int seconds; char seperator; inStream >> hours >> seperator >> minutes >> seperator >> seconds; duration = Duration(hours, minutes, seconds); return inStream; } Habe ganz schön was vergessen, aber jetzt funktioniert alles ;-) Danke nochmal Ich habe deswegen neu gepostet, weil ich vorschnell war mit dem letzten Beitrag... Hat zwar übersetzt, aber das testen mit dem Testprogramm ging nicht. :-/ Bearbeitet 20. Juni 2009 von xxxbolsbluexxx Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.