Giddion Skrevet 15. oktober 2006 Del Skrevet 15. oktober 2006 (endret) Jeg har laget en klasse som skal kastet ved exception, men problemet er at når jeg kaster en exception så går den bare til neste linje og gir en unhandled exception, og jeg får da ikke catcha den (har også prøve med catch (...)) jeg har også laga et test prosjekt, men der funker jo selfølgelig alt perfekt . Hvis noen har en ide om hva som er galt så hadde det vært fryktelig fint. Litt info: VC++ 2005 win32 Dette er koden som funker Skjult tekst: (Marker innholdet i feltet for å se teksten): int Funksjon_som_feiler() { throw &YException(12,TEXT("æææ feil")); //dummy linjer int i = 0; i++; i++; return 0; } int main() { try { Funksjon_som_feiler(); } catch (YException* e) { int dummy = 0; } } Koden som klikker Skjult tekst: (Marker innholdet i feltet for å se teksten): CSoundFileOgg::CSoundFileOgg(const char* pPath)YEXCEPTION { file = fopen(pPath,"rbS"); if(!file) { throw Exception(MODULE_SOUND | STAT_ERROR | YERROR_FILE_NOT_FOUND,TEXT("File Not Found")); } if(ov_open(file,&vf,NULL,0) < 0) { fclose(file); file = NULL; throw Exception(MODULE_SOUND | STAT_ERROR | YERROR_WRONG_FILE_TYPE,TEXT("Not a Ogg container")); } vi = ov_info(&vf,-1); channels = vi->channels; freq = vi->rate; } try/catch kode EDIT: til koden som klikker Skjult tekst: (Marker innholdet i feltet for å se teksten): try { if(strstr(name,".ogg")) return new CSoundFileOgg(name); if(strstr(name,".wav")) return new CSoundFileWav(name); } catch (YException* e) { return 0; } takker for alle svar. Endret 15. oktober 2006 av Giddion Lenke til kommentar
Dead_Rabbit Skrevet 15. oktober 2006 Del Skrevet 15. oktober 2006 (endret) Det ser ut til at du kaster et exception av typen YException, mens du prøver å "ta imot" et exception av typen YException*. Prøv noe slikt som: catch (YException& e) { .... } Edit: Men det er jo litt rart at det ikke funker med catch (...) { } som du sier at du har prøvd da.. Endret 15. oktober 2006 av zirener Lenke til kommentar
lnostdal Skrevet 16. oktober 2006 Del Skrevet 16. oktober 2006 ok, jeg har ikke tid til å se over koden her, men mener det går å slå av generering av "exception-kode" ved å angi et argument til kompileren - kan det være det? Lenke til kommentar
Giddion Skrevet 16. oktober 2006 Forfatter Del Skrevet 16. oktober 2006 (endret) Det ser ut til at du kaster et exception av typen YException, mens du prøver å "ta imot" et exception av typen YException*. Prøv noe slikt som: catch (YException& e) { .... } Edit: Men det er jo litt rart at det ikke funker med catch (...) { } som du sier at du har prøvd da.. 7077968[/snapback] hmm.. jeg kan ikke se at jeg kaster YException bare Exception (som er en macro (&YException++)), så jeg tror det skal gå bra med YException*, og som du sa så vil catch(...) fange den. Jeg glemte også å nevnte at YEXCEPTION er også en macro (throw(...)) ok, jeg har ikke tid til å se over koden her, men mener det går å slå av generering av "exception-kode" ved å angi et argument til kompileren - kan det være det? 7079314[/snapback] Vel det stemmer at det går, men den står på. dvs at exception skal brukes Jeg har også gått gjennom alle instillinger (kompilatore og linker) og jeg ser ingen forskjell på settingene, men prosjektet som klikker er en DLL, der det går er et vanlig program. Jeg har også satt inn test koden inn i prosjektet som klikker, og jeg får da ikke catcha exeptionen. EDIT: jeg tokk å testet med å kaste en int: fikk samme resultat. takker for alle svar. Endret 16. oktober 2006 av Giddion Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå