Wert aendert sich ohne Zugriff?
-
Hallo.
Folgendes Problem:[...] cout << erg << "\n"; while(i<hgenauigkeit) { cout << erg << "\n"; [...]Hierbei gibt das erste cout etwas anderes aus als das zweite!
i und hgenauigkeit sind vom Typ int.
erg ist vom Typ rol (eine von mir geschriebene Klasse fuer grosse Zahlen)
Hier ist der entsprechende Operator<<:ostream& operator<<(ostream& os, rol& b) { int bsize = b.wert.size(); int wo = 0; while(wo!=bsize) { os << b.wert[wo]; wo++; } return(os); }wert ist wo die Zahl gespeichert wird, ein vector<char>.
Eigentlich sollte ja beides Mal das selbe ausgegeben werden, allerdings wird einmal 2 (also richtig) und einmal +1033333333 ausgegeben.
Woran koennte das liegen?Vielen Dank schonmal im voraus,
etlam
-
Probier doch mal, ob hier auch verschiedene Ausgaben kommen:
cout << erg << "\n"; cout << erg << "\n";Und:
ostream& operator<<(ostream& os, rol& b)sollte lieber als zweiten Parameter eine konstante Referenz bekommenostream& operator<<(ostream& os, const rol& b), so kannst du sichergehen, dass das Objekt auch nicht bei der Ausgabe verändert wird.edit: Kann's nicht auch sein, dass gar nicht erst in die while-Schleife eingetreten wird weil die Bedingung nicht erfüllt wird und die Ausgabe erst ein paar Zeilen später kommt?
-
Vielen Dank für deine Antwort!
Einfach so hintereinander bevor in die Schleife eingetreten wird kommt immer das selbe.
Beim eintritt in die Schleife verändert sich das dann auf einmal.
Ich habe jetzt ostream& operator<<(ostream& os, const rol& b) gemacht, allerdings hat das nichts sn dem Problem geändert.
Es wird in die Schleife eingetreten, die Ausgabe kommt sicher von der ersten Zeile inerhalb der Schleife.Vielen Dank schonmal im voraus,
etlam
-
Hm..

Was spuckt dein Programm denn hier aus?:
cout << "Vor Schleife: " << erg << endl; while ( i < hgenauigkeit ) { cout << "in Schleife: " << erg << endl; break; //... }Und arbeitest du zufällig mit Threads?
-
Vielen Dank, jetzt habe ich das Problem behoben.
Irgenwie kam der falsche Wert im zweiten Schleifendurchgang, obwohl mit dem Wert kaum etwas gemacht wird in der Schleife.
Ich hatte deshalb auch nicht daran gedacht, weil der Fehler aus einer Funktion kam, die eigentlich keinen solchen Fehler macht, allerdings hatte ich diese umbenannt und eine andere Funktion so genannt...Vielen dank,
etlam