PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++] Unhandled Exception? LMAA!


noid
2005-10-13, 11:36:34
Hier mal ein Teil einer Memberfkt des Objektes Quality:

x = new TiXmlElement("g_error");
try {
x->SetAttribute("value", calc_error(gen_in, gen_out, todoListe[j].parameter));
} catch (...) {
x->SetAttribute("value", "EOC");
}
break;


Hier mal die Funktion:

double Quality::calc_error(Matrix& in, Matrix& out, own_string errorcrit) {

if (errorcrit == own_string("MSE")) {

} else if (errorcrit == own_string("MMSE")) {

} else {
throw Error("unknown criteria for errorcalculation");
}
return 0.0;
}


Warum bekomme ich eine Meldung über eine nicht abgefangene Ausnahme? Selbst wenn ich catch Error mache bekomme ich diese Meldung.

Monger
2005-10-13, 13:28:55
Irgendwie blicke ich die Klammerung nicht ganz. Ich strukturier mal ein bißchen um:


double Quality::calc_error(Matrix& in, Matrix& out, own_string errorcrit) {

if (errorcrit == own_string("MSE")) {

}
else
if (errorcrit == own_string("MMSE")) {

}
else {
throw Error("unknown criteria for errorcalculation");
}
return 0.0;
}

Kommt mir immer noch komisch vor...
Wo sind denn die Klammern des ersten else? Solche geschachtelten Geschichten gehen imho regelmäßig schief, wenn man nicht wirklich jede einzelne Klammer setzt.

noid
2005-10-13, 13:35:11
für mich sind alle Klammern da.... auch für meinen Arbeitskollegen.

Daran liegt es auch nicht... der fehlende Inhalt möge mir erstmal verziehen sein, der kommt noch. Wollte erstmal testen ob der die Dateien richtig parsed.

Coda
2005-10-13, 16:38:35
Die Klammerung stimmt.

if() { // erste bedingung testen
}
else if() { // wenn nicht zweite bedingung testen
}
else { // alle andere fälle
}

Das ist ganz normales C/Java/C++

noid
2005-10-13, 16:42:08
Inzwischen habe ich was gefunden: anscheinend ist das eine schlechte Übersetzung. Er läuft ja in den catch-block herein... aber lauf Doku soll dies nicht die erste Exception sein, sprich: die Exception passt schon irgendwie...

Naja, nachdem er sicher in den catch-block läuft, egal was fürn Quark ich mache ist es ok ,)

Coda
2005-10-13, 17:31:55
Wenn du übrigens in dem catch-block irgendwelche Speicherzugriffsverletzungen machst oder Exceptions wirfst bekommst du den Fehler natürlich auch.

Was sagt denn der Debugger dazu?

noid
2005-10-13, 18:21:19
Ich mache in diesem catch-block keine deletes oder sonstwas. Ich gebe einem Objekt nur einen Wert (welches auf im Speicher existiert), und mache dann weiter.

Diese Ausgabezeile kommt ja auch schon direkt(!) wenn der Debugger noch bei der catch-Anweisung ist, ohne Code aus dem block ausgehführt zu haben.