Avatar billede interval Nybegynder
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)!
Avatar billede jpk Nybegynder
15. april 2004 - 10:39 #1
Hvis du tilføjer en
catch(...)
{
  cout<< "Unknown exception" <<endl;
}

hvad sker der så?
Avatar billede interval Nybegynder
15. april 2004 - 10:46 #2
den skriver Unknown exception
Avatar billede jpk Nybegynder
15. april 2004 - 10:48 #3
Så er char* ikke den rigtige type i din første catch.
Kompilerer du evt. som UNICODE?
Avatar billede interval Nybegynder
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
Avatar billede interval Nybegynder
15. april 2004 - 10:52 #5
jeg kompilerer på følgende måde:

g++ -o test -lm filnavn.cc

i sun-solaris
Avatar billede jpk Nybegynder
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*
Avatar billede interval Nybegynder
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");
Avatar billede jpk Nybegynder
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";
Avatar billede jpk Nybegynder
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;
}
Avatar billede interval Nybegynder
15. april 2004 - 11:27 #10
tak, det virker! mange tak
Avatar billede jpk Nybegynder
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...
Avatar billede jpk Nybegynder
15. april 2004 - 11:34 #12
Hvis du er tilfreds, vil jeg lægge et svar...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester