Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Überladen des << Operator

Empfohlene Antworten

Veröffentlicht

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

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

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

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

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

Danke für die Hilfe :D

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.