Fehler beim Überladen mit Postfixschreibweise (++val)
-
Das Beispiel aus dem Buch(Bücher) gibt ein undefiniertes Wert aus.
class myComplex {
private:
double _real;
double _image;public:
myComplex( double val1=0.0, double val2=0.0 ) {
_real = val1; _image = val2;
}void print_Complex(){
cout << _real << "+" << _image << "\n";
}// Postfix-Operator ++
myComplex& operator++(int) {
myComplex tmp(*this);
_real++;
_image++;return tmp;
}
};int main() {
myComplex val1(1.1, 2.2);
++val1;cout << "Wert von val1: "; val1.print_Complex();
val1++;
cout << "Wert von val1: "; (val1++).print_Complex();val1++.print_Complex() schreibt eine Zufalszahl und nicht 3.1 + 4.2i
Hat das mit dem neuen C++ Kompiler zu tun ? (Visual C++ 2008 Express Edition)
Danke
-
Eigentlich val++
-
Ist eine Fehlermeldung, ein cpp-Tag oder eine Frage zu viel verlangt? Naja, das Problem wird wohl bei print_Complex() liegen, da du auf eine Variable zugreifen möchtest, die nicht in deinem Scope liegt. Also entweder _real und _image private lassen und eine Getter()- bzw. Setter()-Methode schreiben oder die Variablen public machen.
-
Lösung ist ja nun schon genannt, aber du scheinst mehrere Fehler gemacht zu haben:
class myComplex { private: double _real; double _image; public: myComplex(double val1=0.0, double val2=0.0) //sehr ungünstige variablennamen! { _real = val1; _image = val2; } void print_Complex() { cout << _real << " + " << _image << "i\n"; } // Präfix-Operator ++ myComplex& operator++() { ++_real; ++_image; //das hier hat iwie wenig mit mathematik zu tun, aber ok... return *this; } // Postfix-Operator ++ myComplex operator++(int) { myComplex NRVO(*this); ++*this; //wird über präfix-operator definiert return NRVO; } };/*main.cpp*/ int main() { myComplex val1(1.1, 2.2); ++val1; //2.1 + 3.2i cout << "Wert von val1: "; //print 2.1 + 3.2i val1.print_Complex(); val1++; //3.1 + 4.2i cout << "Wert von val1: "; (val1++).print_Complex(); //print 3.1 + 4.2i //4.1 + 5.2i }bb
PS: Gäbe noch vieles, was man verbessern könnte, aber ich nehm mal an, du gehst gerade nen Tuturial / Buch durch!?
edit:
myComplex& operator++(int)->myComplex operator++(int)
-
Vielen Dank
(habe in zwei Bücher die Beispiele abgeschrieben(Jürgen Wolf;Seite 369))
-
rosic schrieb:
Vielen Dank
(habe in zwei Bücher die Beispiele abgeschrieben(Jürgen Wolf;Seite 369))also verstehst du jetzt, wieso es nicht ging und wieso es so geht?
-
Einen Haken hat das Programm noch:
unskilled schrieb:
// Postfix-Operator ++ myComplex& operator++(int) { myComplex NRVO(*this); ++*this; //wird über präfix-operator definiert return NRVO; }Der Postfix-Increment-Operator sollte keine Referenz zurückgeben. Ich schätze, das ist bis jetzt übersehen worden.
Gruß,
SP
-
Sebastian Pizer schrieb:
Einen Haken hat das Programm noch:
unskilled schrieb:
// Postfix-Operator ++ myComplex& operator++(int) { myComplex NRVO(*this); ++*this; //wird über präfix-operator definiert return NRVO; }Der Postfix-Increment-Operator sollte keine Referenz zurückgeben. Ich schätze, das ist bis jetzt übersehen worden.
Gruß,
SPDanke - richtig geraten ;o)
habs geändert
-
Danke an Kóyaánasqatsi, unskilled und Sebastian Pizer
-
rosic schrieb:
(habe in zwei Bücher die Beispiele abgeschrieben(Jürgen Wolf;Seite 369))
WTF, du hast recht... Vielleicht sollte man das Buch wirklich der Verbrennung zuführen...
Felix