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.

istream operator überladen - wo ist der fehler?

Empfohlene Antworten

Veröffentlicht

Hallo folgendes Problem ich hab ein Softwareprojekt unter visual studio 2005 und möchte nun dieses zu studio 2008 übernehmen, dabei tritt bei einer Struktur für Vektoren folgender Fehler laut Compiler auf:

_________________________________________________________

c:\vector3.h(96) : error C2143: Syntaxfehler: Es fehlt ';' vor '&' 1>

c:\vector3.h(96) : error C2433: 'istream': 'friend' bei der Deklaration von Daten nicht zulässig1>

c:\vector3.h(96) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.

1>

c:\vector3.h(96) : error C2061: Syntaxfehler: Bezeichner 'istream'

1>

c:\vector3.h(97) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.

1>

c:\vector3.h(97) : error C2805: Binärer Operator '>>' hat zu wenig Parameter

1>

c:\vector3.h(97) : error C2333: 'vector3::operator >>': Fehler in Funktionsdeklaration; Funktionstext wird übersprungen

_______________________________________________________________

Die Funktion hier soll den istream operator<< überladen und für die vector-struct bereitstellen:

	friend istream& operator>> (istream& stream, vector3& v)

	{

		stream>>v.x;

		stream>>v.y;

		stream>>v.z;

		return stream;

	}

Weiss jemand warum der Compiler obige Fehlermeldung liefert? Wenn ich diese Funktion auskommentiere wird die Struktur ohne Maulen übersetzt. Unter visual studio 2005 kann ich die struktur auch übersetzen da iss doch irgendwo der Hund begraben?

Dann antworte ich mir mal selber, die LÖsung war denkbar einfach. Die bezeichner istream wurden nicht gefunden man muss den Namen vollständig qualifiziert angeben.

friend std::istream& operator>> (std::istream& stream, vector3& v)

	{

		stream>>v.x;

		stream>>v.y;

		stream>>v.z;

		return stream;

	}

Was mich jetzt nur noch wundert, wenn ich using namespace std; in der main.cpp verwende, warum wird das nicht auf die Klasse vector3.h vererbt?

Was mich jetzt nur noch wundert, wenn ich using namespace std; in der main.cpp verwende, warum wird das nicht auf die Klasse vector3.h vererbt?

Weil du vermutlich das using nach dem Include der Headerdatei stehen hast bzw. nur eine vector3.cpp diese Headerdatei einbindet und du folglich da kein using drin stehen hast.

Stimmt, genau das war das Problem: Das using kam nach der include direktive:

#include <vector3.h>

using namespace std;

Eigentlich ganz logisch, aber vor lauter ärgern denkt man daran nicht, ausserdem schadet ein std::istream zuviel ja sicherlich nicht. Ist übrigens nur eine headerdatei habe die paar funktionen allesamt inline verwendet. Da diese so klein sind dass es sich nicht lohnt extra diese auszulagern in eine extra .cpp Datei.

Vielen Dank für die Aufklärung

Gruss Helldriver123

Bearbeitet von Helldriver123

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.