Helldriver123 Geschrieben 10. November 2009 Geschrieben 10. November 2009 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? Zitieren
Helldriver123 Geschrieben 10. November 2009 Autor Geschrieben 10. November 2009 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? Zitieren
TDM Geschrieben 10. November 2009 Geschrieben 10. November 2009 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. Zitieren
Helldriver123 Geschrieben 10. November 2009 Autor Geschrieben 10. November 2009 (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 10. November 2009 von Helldriver123 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.