Exceptions lassen sich nicht catchen

H

HPollak

Foren As
Hallo!!!

Ich beschäfftige mich seit kurzem wieder mit C++ ( ist schon verdammt lange her ), war in den letzten Jahren mit Java unterwegs.

Jetzt stehe ich for folgendem Problem:

Ich möchte unter Linux (gcc 4.4 und der Boost-Lib ) ein Programmchen schreiben und dabei eine Exception werfen bzw. abfangen, da ich einen Constructor verwenden möchte der das Object mit Daten aus einem XML-String füllt.

als Excpetion hab ich folgenden code verwendet:

Code:
#include <boost/throw_exception.hpp>
#include <boost/exception.hpp>
#include <boost/detail/lightweight_test.hpp>
#include <boost/config.hpp>

typedef boost::error_info<struct tag_errmsg, std::string> errmsg_info; 

class xmlSerializeExcpetion: public std::exception {};

ich möchte die Exception von einer methode aus werfen (nur zum testen mal)

Code:
void Address::fromXML(string xml) throw (){
    boost::throw_exception(xmlSerializeExcpetion());

}

und mit einem CPPUnit-Test mal überprüfen:

Code:
void ExceptionTests::raiseXmlSerializeException() {
    Address adr;
    string str ="mystring";
    CPPUNIT_ASSERT_THROW(adr.fromXML(str), xmlSerializeExcpetion );
}

starte ich nun den test: erhalte ich folgendes ergebnis:
Code:
testtest::myTest : OK
testtest::myTest1 : OK
ExceptionTests::raiseXmlSerializeExceptionterminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<xmlSerializeExcpetion> >'
  what():  std::exception

anstatt:
ExceptionTests::raiseXmlSerializeExceptionterminate : OK

der Test terminiert sollte aber nicht terminieren, denn es ist ja erwartet, dass eine Exception geworfen wird.

Hat einer von euch eine ahnung was ich falsch mache?

habs auch schon mit einem Programmchen in der Main methode probiert ich komme nicht in den catch(...) block.

LG
Harry:think:
 
Servus!

[...]

ich möchte die Exception von einer methode aus werfen (nur zum testen mal)

Code:
void Address::fromXML(string xml) throw (){
    boost::throw_exception(xmlSerializeExcpetion());

}

[...]

Hat einer von euch eine ahnung was ich falsch mache?

Das liegt möglicherweise an dem leeren throw hinter der fromXML Funktion. Damit sagst du dem Kompiler, dass diese Funktion keine Exceptions schmeißt (siehe Exception Specifications). Probiere doch mal was passiert wenn du das "throw ()" wegmachst!

Gruß,
Philip
 
Ja! danke dass war es!

war ein kleiner gedankenfehler, dachte mir die throw() -clausel bedeutet, dass sie beliebige exceptions werfen kann.

wenn ich den excpetiontyp (xmlSerializeExcpetion) angebe, funktionierts auch.

danke
harry
 

Ähnliche Themen

Squid als RPCoHTTPS Proxy für Outlook Anywhere

CentOS 6.3 RADIUS - Keine Verbindung möglich

NagiosGrapher 1.7.1 funktioniert nicht

c++ & postgresql

Superkaramba @ Debian FEHLER????

Zurück
Oben