Ich habe eine Klasse mit dem Namen Bill
. Unter den Eigenschaften der Klasse befindet sich eine mit der Bezeichnung category
vom Typ int
. Beim Drucken der Rechnung sollte anstelle der Nummer der Name der Kategorie angezeigt werden. Also schrieb ich diese statische Hilfsfunktion die category
Ganzzahl in den entsprechenden Zeichenfolge zu konvertieren:C++ Überladen des Operators << Verwenden der statischen Hilfsmethoden Erstellen eines Zugriffsverletzungsfehlers
// Takes an integer representing the category and returns its corresponding name
static const std::string& getCategoryByNumber(int category)
{
switch (category)
{
case 1:
return "Food";
case 2:
return "Gift";
case 3:
return "Fuel";
case 4:
return "Electricity";
case 5:
return "Clothes";
case 6:
return "Holidays";
case 7:
return "Water";
case 8:
return "Fees";
default:
exit(1);
}
}
Jetzt habe ich versucht, die operator<<
außerhalb der Bill
Klassendefinition so zu überlasten:
std::ostream& operator<<(std::ostream& os, Bill& bill) {
int category = bill.getCategory();
const std::string& nameOfCategory = getCategoryByNumber(category);
std::cout << nameOfCategory.c_str();
return os;
}
Der Fehler tritt beim Erstellen eines Objekts vom Typ Rechnung und Ausführen dieser Codezeile auf: cout << billObject;
Wenn dies nicht genug Informationen sind, werde ich gerne mehr hinzufügen. Wie kann ich diesen Fehler beheben und was verursacht es?
'std :: string zu erholen &' -> 'std :: string' – Geoff
Das richtige Werkzeug, solche Probleme zu lösen, ist dein Debugger. Sie sollten Schritt für Schritt durch Ihren Code * gehen, bevor Sie auf Stack Overflow nachfragen. Für weitere Hilfe lesen Sie bitte [Wie kleine Programme zu debuggen (von Eric Lippert)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Zumindest sollten Sie Ihre Frage so bearbeiten, dass sie ein [minimales, vollständiges und verifizierbares] (http://stackoverflow.com/help/mcve) Beispiel enthält, das Ihr Problem zusammen mit den Beobachtungen, die Sie im Debugger gemacht haben, reproduziert . –
@ πάνταῥεῖ Wenn Sie einen Blick auf den Screenshot werfen, bin ich tatsächlich Debuggen des Programms :) –