C++ Komplexe Zahlen Klasse



  • Fehlt vielleicht ein Include <sstream>?



  • asc schrieb:

    Fehlt vielleicht ein Include <sstream>?

    ja hat gefehlt! Mein Chef setzt sich auch gerade damit auseinander, versteht aber auch nicht warum es dann heißt

    1>f:\programmieren mit c++\komplexe zahlen versuch 4\komplexe zahlen versuch 4\komplexe zahlen.h(42) : error C2804: Binärer Operator '<<' hat zu viele Parameter
    1>f:\programmieren mit c++\komplexe zahlen versuch 4\komplexe zahlen versuch 4\komplexe zahlen.h(42) : error C2333: 'Complex::operator <<': Fehler in Funktionsdeklaration; Funktionstext wird übersprungen
    1>f:\programmieren mit c++\komplexe zahlen versuch 4\komplexe zahlen versuch 4\main.cpp(14) : error C2679: Binärer Operator '<<': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'Complex' akzeptiert (oder keine geeignete Konvertierung möglich)
    1>
    

    Aktuell sieht die Headerfile jetzt so aus:

    #include <sstream>
    
    class Complex
    {
    public:
    	Complex(double r, double i)
    	{
    		m_real = r;
    		m_imag = i;
    	}
    	~Complex (){};
    
    	const std::string Complex::toStdString() const
    	{
    		std::ostringstream os;
    		os << m_real << " + " << m_imag << "i";
    
    		if (m_real == 0)
    		{
    			os << m_imag << "i";
    		}
    
    		if (m_imag == 0)
    		{
    			os << m_real;
    		}
    
    		if (m_imag < 0)
    		{
    			os << m_real << m_imag << "i";
    		}
    		return os.str();
    
    	}
    
    	std::ostream& operator << (std::ostream& os, const Complex &o)
    	{
    		return os << o.toStdString();
    	}
    
    	Complex operator + (const Complex &o)
    	{	
    		return Complex(o.m_real + m_real, o.m_imag + m_imag);
    	}
    
    	Complex operator - (const Complex &o)
    	{
    		return Complex(o.m_real - m_real, o.m_imag - m_imag);
    	}
    
    	Complex operator * (const Complex &o)
    	{
    		return Complex((o.m_real * m_real) - (o.m_imag * m_imag), (o.m_real * m_imag) + (o.m_imag * m_real));
    	}
    
    	Complex operator / (const Complex &o)
    	{
    		return Complex(((o.m_real * m_real) + (o.m_imag * m_imag)) /((m_real * m_real) + (m_imag * m_imag)),
    			((o.m_imag * m_real) - (o.m_real * m_imag)) / (( m_real * m_real) + (m_imag * m_imag)));
    	}
    
    private:
    double m_real, m_imag;
    
    //protected:
    
    };
    


  • Dein operator<< ist immer noch ein Member und keine freie Funktion



  • Dein operator<< ist keine freie Funktion! Wurde eigentlich oft genug erwähnt dass das falsch ist. Ich hatte auch gehofft ich hätte erklärt, warum diese Fehlermeldung auftritt.



  • daddy_felix schrieb:

    Dein operator<< ist immer noch ein Member und keine freie Funktion

    :DD ahh danke euch allen!

    habe es jetzt als freie Funktion geschrieben.. und jetzt funktioniert es!

    Ich kann dieses Forum nur an alle weiter empfehlen!
    Liebe Grüße


  • Mod

    Was genau macht deiner Meinung nach eigentlich Zeile 11?



  • @SeppJ: mein Chef meinte ich sollte noch einen Destruktor reinschreiben.. also habe ich das gemacht.. Dient zur Freigebung benutzter Ressourcen 😉



  • wenn der destruktor leer ist, kannst du ihn auch gleich weg lassen, da der compiler dann einen für dich erzeugt.



  • danke 😉 wie schon gesagt, bin bei den Anfängen



  • scanbot90 schrieb:

    @SeppJ: mein Chef meinte ich sollte noch einen Destruktor reinschreiben..

    Wenn du keinen eigenen Destruktor schreibst, wird automatisch ein Leerer erzeugt.

    Sprich: Du machst nichts anderes, als du bekommen würdest, wenn du ihn unnötigerweise selbst leer implementierst.

    scanbot90 schrieb:

    Dient zur Freigebung benutzter Ressourcen 😉

    Schön aus dem Lehrbuch rezitiert, aber unsinnig, wenn du keine Aufräumarbeiten durchführst.


Anmelden zum Antworten