Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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?

Geschrieben

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?

Geschrieben

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.

Geschrieben (bearbeitet)

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

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