Problem mit Klasse



  • Hallo,
    ich habe folgendes Programm:

    // complex.h
    
    #include <string>
    using namespace std;
    
    class Complex {
      double re;
      double im;
    public:
    	Complex();
    	Complex(double, double);
    	Complex sum(Complex a, Complex b);// +
    	double print();
    	~Complex();
    };
    
    //complex.cpp
    
    Complex Complex:: sum (Complex a, Complex b)   // (Addition)
    {
    	Complex erg;
    	erg.re= a.re+b.re;
    	erg.im= a.im+b.im;
    
    	return erg;
    }
    
    double Complex:: print() 
    {
    	double real;
    	double img;
    
    	real=this->re;
    	img=this->im;
    
    	return(real);
    }.....
    

    Nun mein Problem:
    double real erhält immer einen falschen Wert. die sum funktion habe ich schon überprüft, die spuckt das richtige ergebnis aus, wenn ich aber dann mit erg.print(); den realteil ausgeben will,geht das nicht...wo ist mein fehler?
    wäre echt supi wenn mir jmd helfen könnte, ich komm nicht drauf 😞
    danke schonmal, greetz!



  • ich sehe keine stelle an der was ausgegeben wird



  • die double real welche die print funktion ausgibt, habe ich in der main ausgeben lassen, aber auch wenn man in der print schon macht cout << real wird was falsches ausgegeben.



  • na dann zeig doch mal den code



  • // complex.h
    
    #include <string>
    using namespace std;
    
    class Complex {
      double re;
      double im;
    public:
        Complex();
        Complex(double, double);
        Complex sum(Complex a, Complex b);// +
        double print();
        ~Complex();
    };
    
    //complex.cpp
    
    Complex Complex:: sum (Complex a, Complex b)   // (Addition)
    {
        Complex erg;
        erg.re= a.re+b.re;
        erg.im= a.im+b.im;
    
        return erg;
    }
    
    double Complex:: print()
    {
        double real;
        double img;
    
        real=this->re;
        img=this->im;
    
        cout << real << endl; // gibt schon falsches aus.
        cout << re << endl; // gibt auch was falsches aus.
    
        return(real);
    }
    
    //main.cpp
    
    #include "complex.h"
    
    void main()
    
    {
    	Complex a(5,5);
    	Complex b(5,5);
    	Complex erg;
    	erg.sum(a,b);
    	erg.print();
    }
    

    die frage warum ich bei print() überhaupt ein return hab, beantworte ich jetzt schonmal:) : und zwar soll spätermal der returnwert noch wo anderes genutzt werden, aber soweit bin ich leider noch lange nicht 😞



  • dein sum gibt ein Complex objekt zurück das du nie mehr verwendest



  • Sind deine Konstruktoren richtig implementiert (ich tippe auf uninitialisierte Member)?

    Und wie soll die Methode sum() denn korrekt arbeiten?
    So wie du es gemacht hast, also den neuen Wert zurückgeben - ohne die aktuelle Instanz zu verwenden, solltest du diese Methode statisch deklarieren. Dann käme nämlich ein Compiler-Fehler...

    static Complex sum(Complex a, Complex b);
    
    Complex erg;
    erg.sum(a, b); // Compiler-Fehler
    
    Complex c = Complex::sum(a,b); // korrekt
    cout << c.print();
    

    Und verwende NIEMALS "using namespace std;" in Headern! (ich glaube, das könnte ich bald als meine Signatur verwenden -)



  • Danke! So wie du sagst TH funkt es.
    namespace im header, wirds auch nie wieder geben 🙂

    grüße, schönen sonntag noch!



  • warum machst du nicht ne methode add(Complex& c)? Wäre besser, als immer ein neues Objekt zu erzeugen. Oder gleich + überladen



  • Complex operator+ (const Complex &a, const Complex &b){
    
        return Complex(a.re+b.re,a.im+b.im);
    }
    

    und angenomme der konstruktro

    Complex(double, double);
    

    funzt korrekt.

    Complex::Complex(double r, double i) : re(r),im(i){
    
    }
    

Anmelden zum Antworten