Obsuga wyjątków i RTTI

0

Hej mam problem.... jak zrobić obsugę wyjtków? Mam coś takiego:

#include <typeinfo.h>
#include <iostream.h>

class break_exception 
{
  public:
		break_exception(char* amessage)
		{
			message=amessage;
		};
		char* what() const 
		{
			return message;
		};
	private:
		char* message;
};


class A{
public:
  // object for class needs vtable
  // for RTTI
  virtual ~A();
};

class B:public A
{
};

int main(void) 
{
	B *pb = NULL;
	A *pa = pb;
	try 
	{
	cout << typeid(*pa).name() << endl;
  }
	catch (bad_typeid)
	{
		cout << "Object is NULL" << endl;
	}
	return 0;
}

Chodzi o to jak mimo bledu wynikajacego z typeid majacego byc obsluzone w catch, przejac obsluge wyjatku (ponoc ma to byc jakis obiekt... moze :public exception ? ktory gdzies tu w srodku wyrzucalby komunikat o pliku i nr lini gdzie nastapil blad (korzysta z makr: LINE i FILE)

0

To poprzednie rozumowanie bylo bledne...to ponizej jest zblizone troche do tego co ma byc.... tylko objekt wyjatek jest tu nie tak... to jeszcze nie to... moze ktos wie jak ??
Wyjatki maja byc wylapane - dla kazdego ma byc wypisana informacja o typie, Kazdy z wyjatkow powinien posiadac informacje o pliku i miejscu w ktorym nastapilo zgloszenie bledu.

#include <stdexcept>
#include <iostream.h>
#include <typeinfo.h>

class wyjatek : public std::exception
{
public:
wyjatek(int _linia,char *_plik, const char *_name)
{
linia=_linia;
plik=_plik;
name=_name;
}
void pokaz ()
{
cout << "fail at line:" << linia <<", file: (" << plik << ")"<<endl;
cout << "Type: "<<name << endl;
}
int linia;
char *plik;
const char *name;
};

int main(void)
{
try
{
throw std::runtime_error("Ciag");
}
catch(std::exception &E)
{
cout << "Exception: "<<E.what()<<endl;
//cout << typeid(E).name() << endl;
wyjatek nowy(LINE,FILE,typeid(E).name());
nowy.pokaz();
}
return 0;
}

0

Heh ja to robilem tak:
najpierw deklaracja klasy podstawowej dla bledu a nastepnie klasy dziedziczne z ktorych kazda to inny blad. Wtedy przechwytujesz dany obiekt (blad) w catch i bedzie trybic...

1 użytkowników online, w tym zalogowanych: 0, gości: 1