类型:转载 责任编辑:asp.net 日期:2007/05/23
热门软件下载:
程序如下:
class Base {
public:
virtual void vvfunc() {}
};
class DerivedA : public Base {};
class DerivedB : public Base {};
void main()
{
DerivedB &dB = *(new DerivedB);
Base &B=dB;
try
{
DerivedA p=dynamic_cast<DerivedA &>(B);
cout<<"Success"<<endl;
}
catch (std::bad_cast&) //??为什么不能跳到此处??????
{
cout<<"cast error"<<endl;
}
catch (...)
{
cout<<"error"<<endl;
}
}
上段程序为什么不是输出“cast error”。(VC6.0,RTTI)
网友回答:
mark
先up
g++编译输出是:
cast error
up 了
你把
catch (...)
{
cout<<"error"<<endl;
}
干掉看看如何?
我觉得不关这个事
用了catch(...)前面就不能再有catch(DataType),不然是语法错误,编译器会报错的,BCB是这样的,其它编译器应该也是
如果是vc,这样写吧
同时把工程的产生rtti信息项选中
#include <stdio.h>
#include <typeinfo.h>
class Base {
public:
virtual void vvfunc() {}
};
class DerivedA : public Base {};
class DerivedB : public Base {};
void main()
{
DerivedB &dB = *(new DerivedB);
Base &B=dB;
try
{
DerivedA p=dynamic_cast<DerivedA &>(B);
printf("success\n");
}
catch (bad_cast&) //??为什么不能跳到此处??????
{
printf("cast error\n");
}
catch (...)
{
printf("error\n");
}
}