PDA

View Full Version : [c++] gestione delle eccezioni


ndakota
14-12-2007, 09:50
salve a tutti, ho un piccolo programma che con il vc++ express funziona mentre con il dev anzichè gestire l'eccezione crasha.. vi posto il codice:


#include <iostream>
using namespace std;

double dividi(int, int);

int main() {

int a, b;

cout << "inserisci a: ";
cin >> a;
cout << "inserisci b: ";
cin >> b;

try {
cout << "il risultato e: " << dividi(a, b);
} catch (char* str) {
cout << str << endl;
}

cin.get();
cin.get();
return 0;
}

double dividi(int a, int b) {

if (b)
return (double) a/b;

throw "divisione per zero impossibile";
}


sapete dirmi se è un problema del codice o del compilatore?

cionci
14-12-2007, 10:16
Prova a fare il catch di const char *
In alternativa prova con string.

ndakota
14-12-2007, 10:18
incredible.. aggiungendo il const funziona.. perchè si mette const? grazie comunque.. :)

cionci
14-12-2007, 10:26
incredible.. aggiungendo il const funziona.. perchè si mette const? grazie comunque.. :)
In teoria non sarebbe dovuto crashare, mi sembra un bug, semplice non avrebbe dovuto catchare l'eccezione.
Le stringhe definite così "ciao sono una costante stringa" sono const char * e la conversione fra da const char * a char * non è ammessa.
Comunque per evitare problemi (perché lì ci sono problemi più "fini", tipo: la costante stringa è dichiarata all'interno della funzione, quindi in teoria all'esterno non dovrebbe essere più definita), fai il catch di una const string.

ndakota
14-12-2007, 11:55
non posso.. non le abbiamo ancora fatte le string quindi se le uso nella verifica si incazza..

cionci
14-12-2007, 14:12
Sinceramente andrebbe analizzato bene lo standard del linguaggio per vedere se è possibile fare una cosa del genere. Vado ad aprire lo Stroustrup :O :D

ndakota
14-12-2007, 14:15
Sinceramente andrebbe analizzato bene lo standard del linguaggio per vedere se è possibile fare una cosa del genere. Vado ad aprire lo Stroustrup :O :D

ce l'ho anch'io ma non mi azzardo ad aprirlo, non capisco nulla, troppo difficile :D

71104
14-12-2007, 14:32
fai il catch di una tua classe che contiene la stringa con l'errore.

cionci
14-12-2007, 14:58
A dire la verità non sono arrivato ad una conclusione. In ogni caso credo che quelle costanti essendo definite durante tutta l'esecuzione del programma (anche al di fuori della funzione) abbiano la particolarità che l'indirizzo puntato sia valido ovunque nel programma.
Per il problema del const: il programma come ti terminava ? Con il messaggio di unhandled exception ?

cionci
14-12-2007, 15:42
In effetti l'eccezione è del tipo "const char *" e non veniva catchata (che parolaccia :)).

ndakota
14-12-2007, 16:14
ok vedrò che riesco a fare grazie a tutti :)