Ich versuche, eine rekursive Funktion zu debuggen, die verwendet wird, um Benutzereingaben zu validieren und einen Wert zurückzugeben, wenn die Eingabe in Ordnung ist. Die Funktion sieht so aus:
double load_price()
{
double price;
Goods * tempGd = new Goods();
cin >> price;
while (!cin)
{
cin.clear();
#undef max
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
cout << endl;
cout << "You didn't enter a number. Do so, please: ";
cin >> price;
} // endwhile
if (!tempGd->set_price(price))
{
cout << endl;
cout << "The price " << red << "must not" << white << " be negative." << endl;
cout << "Please, insert a new price: ";
load_price();
}
else
{
delete tempGd;
return price;
}
}
Die Methode set_price() von Waren Klasse sieht wie folgt aus
bool Goods::set_price(double price)
{
if (price> 0)
{
priceSingle_ = price;
priceTotal_ = price* amount_;
return true;
}
return false;
}
Ich habe versucht, das Problem auf Papier zu zeichnen, aber alle meine Diagramme scheinen so auszusehen, wie meine Funktion bereits aussieht. Ich denke, es gibt einige Probleme mit Rücksendungen, aber ich weiß nicht, wo.
Hilfe wäre sehr willkommen.
Wo denken Sie das rekursive Ergebnis
load_price();
geht?– WhozCraig
29. Dezember 2014 um 15:25 Uhr
Nicht, ich wiederhole nichtverwenden Sie Zeiger und
new
Hier. Es ist völlig bedeutungslos und führt tatsächlich zu einem Speicherleck in Ihrem Code.– Konrad Rudolf
29. Dezember 2014 um 15:26 Uhr
@WhozCraig Ich habe ehrlich gesagt keine Ahnung. Es scheint irgendwo in der Funktion selbst vergraben zu sein.
– Andreas
29. Dezember 2014 um 15:28 Uhr
@KonradRudolph Danke für den Tipp, m8 hat das Warenobjekt auf dem Haufen durch ein Stapelobjekt ersetzt.
– Andreas
29. Dezember 2014 um 15:29 Uhr
@WhozCraig: Die richtige Antwort lautet: nirgends.
– Leichtigkeitsrennen im Orbit
29. Dezember 2014 um 17:11 Uhr