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 fra Salesforce
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