15. april 2004 - 10:33
Der er
11 kommentarer og 1 løsning
exception i c++
hej, Jeg vil gerne throw flere forskellige exceptions som strenge. Disse skal så blive catch i min main class, hvor den kan skrives ud. fx. if (current_token!=rightp_t) throw("error: square root unmatched left parenthese"); int main(){ try{ get_next_command(); } catch(char* s){//catches exceptions and prints them on screen, cout<<'\t'<<s<<endl;} dette kan jeg dog ikke klare, den når fint ned til throw-argumentet hvor den stopper med: abort(core dumped)!
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
15. april 2004 - 10:39
#1
Hvis du tilføjer en catch(...) { cout<< "Unknown exception" <<endl; } hvad sker der så?
15. april 2004 - 10:46
#2
den skriver Unknown exception
15. april 2004 - 10:48
#3
Så er char* ikke den rigtige type i din første catch. Kompilerer du evt. som UNICODE?
15. april 2004 - 10:49
#4
jeg har prøvet at skrive cout<< både før og efter throw, og den skriver linie fint ud før throw, men når aldrig til linien efter
15. april 2004 - 10:52
#5
jeg kompilerer på følgende måde: g++ -o test -lm filnavn.cc i sun-solaris
15. april 2004 - 10:52
#6
Jo, det er fint, men din catch fanger ikke den exception. Det er sandsynligvis fordi det ikke er af typen char*
15. april 2004 - 10:59
#7
ok, kan du hjælpe mig med typen? Jeg er desværre ikke så skarp til c++. Jeg har prøvet med char, char* og string(efter at have #include <string>), men ingen af dem virker. mit throw er på formen: throw("error: square root unmatched left parenthese");
15. april 2004 - 11:01
#8
throw tager ikke argumenter som en funktion, jeg ville mene underståede ville være fint: throw "error: square root unmatched left parenthese";
15. april 2004 - 11:13
#9
Jeg kan nu bedre li' konstruktioner som: #include <string> #include <iostream> using namespace std; class Exception { public: string m_strError; }; class SyntaxException : public Exception { public: SyntaxException(string strError) { m_strError = strError; }; }; int _tmain(int argc, _TCHAR* argv[]) { try { throw SyntaxException("square root unmatched left parenthesis"); } catch(SyntaxException& e) { cout << e.m_strError << endl; } return 0; }
15. april 2004 - 11:27
#10
tak, det virker! mange tak
15. april 2004 - 11:34
#11
Det er også noget pænere, synes jeg... Du kan så tilføje exceptions alt efter fejlen, fx: class ParseException : public Exception { public: ParseException(string strError) { m_strError = strError; }; }; Så kan du håndtere fejlen alt efter hvilken type exception der smides...
15. april 2004 - 11:34
#12
Hvis du er tilfreds, vil jeg lægge et svar...
Kurser inden for grundlæggende programmering