Operator << überladung klappt nicht
-
Ich befasse mich gerade mit der Überladung von Operatoren und bei mir will das nicht so richtig klappen.
Ich habe mir Quellcode aus dem Internet in eine cpp datei kopiert:#include <iostream> // ... wird spaeter erklaert #if defined (IMPLICIT_USING_STD) using namespace std; #endif class Complex { // Diese Ausgabe Operatorfunktion muss auf die // privaten Member "m_re" und "m_im" zugreifen können! friend ostream & operator<< (ostream&, const Complex &); public: Complex () {}; Complex (double re, double im) : m_re(re), m_im(im) {} Complex operator+ (const Complex &); Complex operator- (const Complex &); private: double m_re; double m_im; }; Complex Complex::operator+ (const Complex &c) { Complex result; result.m_re = this -> m_re + c.m_re; result.m_im = this -> m_im + c.m_im; return result; } Complex Complex::operator- (const Complex &c) { Complex result; result.m_re = this -> m_re - c.m_re; result.m_im = this -> m_im - c.m_im; return result; } // Ueberladen der Operatorfunktion "operator<<" // fuer die Operanden "ostream" und "Complex" // So koennen dann Complex Objekte wie ganz // normale Variablen ausgegeben werden. ostream & operator<< (ostream &o, const Complex &c) { o << "(" << c.m_re << "," << c.m_im << ")"; return o; } int main () { Complex c1(1.0, 2.0); Complex c2(3.14, 2.718); Complex c3, c4; // Anwendung der Operatoren "+" und "-" c3 = c1 + c2; c4 = c1 - c2; // Anwendung des Standard Ausgabeoperators "<<" // auf den benutzerdefinierten Datentyp "Complex". cout << c1 << " + " << c2 << " = " << c3 << endl; cout << c1 << " - " << c2 << " = " << c4 << endl; }Wenn ich das Kompilieren will, bekomme ich mehrere Fehlermeldungen.
Liegt das jetzt an meinem Compiler? weil in einer Vorlesung wurde uns das genauso gezeigt.
Fehlmeldungen:
Complex.cpp:12: error: ISO C++ forbids declaration of 'ostream' with no type
Complex.cpp:12: error: 'ostream' is neither function nor member function; cannot be declared friend
Complex.cpp:12: error: expected ';' before '&' token
Complex.cpp:47: error: expected constructor, destructor, or type conversion before '&' token
-
hab grad keinen compiler zur Hand,aber was mir komsch erscheint ist deine
if defined....
wenn ich einfach annehmen würde dass vom code her alles stimmt klappt es von der logik nicht du nimmst std nur wenn es automatisch vom compiler genommen wird, müsste es nicht eher genommen werden wenn der compiler es nicht automatisch nimmt? ausserdem sollte man sich nie drauf verlassen dass ein compiler nimmt und was nicht, immer selber einbinden was du brauchst!Versuch mak ohne das #if bis #endif und nimm nur
using namespace stdbin mir nichtsicher aber koennte ein Grund sein
-
Tatsache daran lag es, jetzt bekomme ich keine Fehlmeldungen mehr, danke.