Zum Inhalt springen

Überladen des << Operator


xxxbolsbluexxx

Empfohlene Beiträge

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... :D

MFG xxxbolsbluexxx

Link zu diesem Kommentar
Auf anderen Seiten teilen

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).

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von xxxbolsbluexxx
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 Programmierung

Und 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::).

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :D

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 von xxxbolsbluexxx
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...