Hallo,
habe eine Frage an euch Profis!!
Ich bin dabei ein Programm zu schreiben, in dem in etwa sowas mache:
cross newCross;
newCross = getShortLongLengths(newCross);
Seit ich das eingebaut habe (und natürlich die Funktion) hängt wenn ich nicht, wie im Thread-Titel beschrieben, konfiguriere, das Programm auf.
Die Methode liefert mir 2 Werte für newCross zurück: cross.long_length und cross.short_length (beides float).
Wenn ich debugge und mir nach dieser Zeile die Werte anschaue, steht bei mir bei cross.long_length immer igendsowas wie 2.03847-den aus, bei cross.short_length stimmt der angezeigte Wert??
Wenn ich jedoch mit cout << ...... die Werte ausgeben lasse, so stimmen diese.
Also die Methode getShortLongLengths(cross newCross) sieht ca. so aus:
{
float area = STR_LENGTH * STR_LENGTH;
float s_length = rand_uniform(STR_LENGTH * 0.65, STR_LENGTH * 0.8); //von erstem Wert bis max. zum 2. Wert eine Random-Zahl generieren
float l_length = area/s_length;
newCross.long_length = l_length;
newCross.short_length = s_length;
return newCross;
}
woran kann das liegen, daß mein Programm jetzt nur noch mit dieser Einstellung läuft? Hat jemand eine Erklärung dafür?
Ich hoffe das ist keine zu extreme Noob-Frage, aber ich wüsste nicht, was da nicht hinhauen sollte.....
Lg
Spite
"Programmdatenbank für bearbeiten und fortfahren" Visual Studio
-
-
Hört sich schon irgendwie komisch an, ich bezweifel aber dass es irgendwas mit den Einstellungen zu tun hat.
Ich verstehe auch nicht ganz wozu du das newCross überhaupt an die Funktion übergibts, außerdem wird es garnicht initialisiert. In der Funktion werden die Werte aber dann sowieso überschrieben ....? Oder übergibts du vielleicht eine Referenz, wobei du dann aber gar keinen Rückgabe wert benötigen würdest.
Du hast ja 2 Variablen mit dem Namen newCross, eines außerhalb der Funktion und den Übergabeparameter, der so wie es aussieht die nicht initialisierte Struktur kopiert und dann auch nur innerhalb der Funktion gültig ist. Kann es sein dass du da evtl. das falsche newCross zum falschen Zeitpunkt überwachst und dabei eigentlich eh alles passt?
Für mich logischer wäre:Code
Alles anzeigencross getShortLongLengths(void) { float area = STR_LENGTH * STR_LENGTH; float s_length = rand_uniform(STR_LENGTH * 0.65, STR_LENGTH * 0.8); //von erstem Wert bis max. zum 2. Wert eine Random-Zahl generieren float l_length = area/s_length; cross temp; temp.long_length = l_length; temp.short_length = s_length; return temp; } ... cross newCross = getShortLongLengths();
MfG Lui -
Ok, ich denke ich habs nicht so genau beschrieben, das newCross hat schon einige Werte zugewiesen, daher habe ich es auch übergeben.
Das newCross in der Funktion ist eigentlich nur in der Funktion selbst sichtbar dachte ich..... vielleicht sollte ich es tatsächlich umbenennen, ist auch übersichtlicher denke ich....
Stimmt, im Endeffekt kommt mir das irgendwie komisch vor, das das Programm laufen sollte mit meiner Einstellung und sonst nicht.
Da ich aber sowieso noch einmal einiges verändert habe muß ich es sowieso erstmal wieder so weit bringen (vielleicht heut noch). Wenns dann wieder nicht funktioniert, melde ich mich wieder.Danke erstamal für deinen Tipp.
Lg
Spite -
Also ich bin jetzt wieder so weit, wie ich war, als ich den Post geschrieben habe.
Jetzt scheint alles zu funktionieren, wieso weiß ich allerdings auch nicht, aber die hauptsache ist ja, das es funkioniert.
Lg
Spite
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!