PDA

Visualizza la versione completa : [C++] Gestione delle eccezioni


palomo2
02-11-2008, 14:11
Salve ragazzi, sto cercando di gestire le eccezioni in C++ ma proprio non riesco a fare quello che mi serve. Potreste darmi una mano voi?
In pratica ho bisogno di propagare un eccezione al chiamante che contenga una stringa di errore e ho provato in questo modo:

classeServente.h

class classeServente
{
public:
...
bool metodo() throw(char* string);
...
}

ClasseServente.cpp

classeServente::metodo() throw(char* string)
{
if(errore == true)
{
throw "Stringa di errore";
return false;
}
}

ClasseCliente.cpp

....
try { ClasseServente::metodo(); }
catch(char* err) { cout<< err; }
catch(...) { cout<< "Errore Sconosciuto"; }
....

In questo modo però, quando si verifica l'eccezione, il programma mi termina con stato -1 senza gestire le eccezioni... :(

grazie per aver letto

MItaly
02-11-2008, 14:31
Prova con


catch(const char* err) { cout<< err; }
e modifica la clausola throw mettendo const char * invece di char *.

palomo2
02-11-2008, 14:39
E funzionaaa !!! Grazie, stavo impazzendo.... In tutti i tutorial che ho letto diceva di mettere char*... maledetto C++ :D

MItaly
02-11-2008, 14:54
Non è il C++, ma sono i tutorial che sono il male: sono mediamente scritti da chi non sa le cose o sono obsoleti; è da un sacco di tempo che lo standard C++ definisce le stringhe inserite direttamente nel codice come const char * e non come char * (il che ha senso, visto che se non fossero const potrebbero succedere cose spiacevoli).

palomo2
02-11-2008, 15:31
Dicevo così perchè purtroppo io vengo dal java e mi trovo un pò spiazzato quando mi tocca essere così rigoroso. Sto sviluppando un'applicazione semplice e volevo cogliere l'occasione per approcciare al C++ sperando di essere avvantaggiato rispetto a chi inizia da zero ma il passaggio mi è già costato pagine e pagine di manuali e tutorial

MItaly
02-11-2008, 20:13
Comunque di solito conviene usare la classe exception e le sue classi derivate, come eccezioni sono più semplici da gestire e da espandere rispetto ai tipi primitivi, specialmente se vieni da Java.

Loading