Kod:
#include <iostream>
using std::cout;
class O {};
class I : O {};
void m(int& x)
{
x=0;
try
{
x=1;
throw new O;
x=2;
}
catch(I* i)
{
x=3;
}
if (x!=3) x=4;
}
int main ()
{
int x;
m(x);
cout << x;
system("pause");
return 0;
}
Prijavljuje gresku kod linije "throw new O". Kada promenim catch da hvata O*, ili throw da baca I* radi normalno. Da li je ikako moguce zaobici ovaj problem i koristiti pokazivac na izvedenu klasu da hvatam pokazivac na baznu? Takodje ekspilictnim konvertovanjem pokazivaca kod throw operatora u tip I* program radi normalno.
Prvenstveno me buni jer je ovakvo pitanje doslo na ispitu iz C++ (bez main funkcije, nju sam ja napisao cisto da bi testirao u kompajleru, a zadatak je da se odredi vrednost promenljive x nakon zavrsetka funkcije m). Kontam da je greska, pa reko da l' da im prijavljujem to?