Ich bin nicht so vertraut mit der Ausnahmebehandlung so könnte mir jemand bei diesem Problem helfen ?? Also für dieses Programm, in dem Fall eines nicht vorhandenen Schlüssels in der std :: map, möchte ich etwas werfen, aber ich weiß nicht was.Ausnahmebehandlung. Wie wirft man einen Iterator?
der Kartenschlüssel, wenn es existiert wird eine Telefonnummer (String), aber wenn es nicht existiert, was wäre es?
class SmartCarrier{
private:
string carrier_name_;
map<string,vector<Message*>> accounts_map;
public:
Search();
}
void phone::Search{
string phone_number;
map<string,vector<Message*>>::iterator iter;
cout << "Enter a phone number: ";
getline(cin,phone_number);
try{
iter = phone_map.find(phone_number);
if (iter ==phone_map.end()) {
//Incase of a non-existing phone number what do I throw?
throw iter;
}
}
catch(/*iter ??? what should the block catch as a value?*/){
cout << "Phone number not found." << endl;
}
Was ist der Typ von 'Iter'? Das ist es, was du fangen musst. Nicht, dass es in deinem Fall wirklich wichtig wäre, da es immer gleich 'phone_map.end()' ist. Ich schlage vor, dass Sie [eine der Standardausnahmeklassen] (http://en.cppreference.com/w/cpp/error) verwenden und vielleicht Ihre eigene basierend auf einer Standardklasse zusammenstellen. –
Auch zu Ihrer Information: Während die Verwendung von Ausnahmen nur einen vernachlässigbaren Einfluss auf die Leistung hat, wenn keine Ausnahmen ausgelöst werden, haben Ausnahmen in C++ einen erheblichen Einfluss auf die Leistung, wenn Sie eine werfen und abfangen. Ausnahmen sollten nur in Ausnahmefällen verwendet werden. Die Nichtvalidierung von Benutzereingaben ist normalerweise kein solcher Ausnahmefall. –
Ich denke, das ist ein schlechtes Beispiel für die Ausnahmebehandlung. Sie brauchen hier keinen Try-Catch-Block. –