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){ }