我的目的是捕获dynamic_cast操作失败时产生的异常,但是如何配置vc中的选项才能捕获到呢。我在网上查资料,有人说,把/GX 改成 /eha 就可以了,但是经过实验,我发现改成 /eha 后可以捕获了,但是再改成/GX还能捕获到,为什么开始就捕获不到呢,是不是各个选项的顺序也有要求。
上面是我说的一个测试用的工程,有时候能捕获到,有时候不能捕获到,但是在我另外一个实际的工程中,不论怎么设置选项都不能捕获。(enable exception handling选不选都不行) 到底怎么组合各个vc选项才能捕获到异常呢?
只有60分了,不好意思啊:)测试工程代码如下(实际工程原理和这个相同):
class TestBase
{
private:
int a;
public:
int virtual getA();
};class TestSub : public TestBase
{
private:
int b;
public:
int getA();
};
int TestBase::getA()
{
return 4;
}
int TestSub::getA()
{
b = 1;
return b;
}void CMainFrame::OnTest()
{
// TODO: Add your command handler code here
TestSub * subA = new TestSub;
TestSub * subB = subA; delete subA;
try
{
TestSub * subC = dynamic_cast<TestSub *>(subB);
}
catch(...)
{
AfxMessageBox("hello");//我所说的捕获不到异常,是指这里面的代码没有执行
subB = NULL;
}
if(subB != NULL)
{
int a = subB->getA();
}
}
上面是我说的一个测试用的工程,有时候能捕获到,有时候不能捕获到,但是在我另外一个实际的工程中,不论怎么设置选项都不能捕获。(enable exception handling选不选都不行) 到底怎么组合各个vc选项才能捕获到异常呢?
只有60分了,不好意思啊:)测试工程代码如下(实际工程原理和这个相同):
class TestBase
{
private:
int a;
public:
int virtual getA();
};class TestSub : public TestBase
{
private:
int b;
public:
int getA();
};
int TestBase::getA()
{
return 4;
}
int TestSub::getA()
{
b = 1;
return b;
}void CMainFrame::OnTest()
{
// TODO: Add your command handler code here
TestSub * subA = new TestSub;
TestSub * subB = subA; delete subA;
try
{
TestSub * subC = dynamic_cast<TestSub *>(subB);
}
catch(...)
{
AfxMessageBox("hello");//我所说的捕获不到异常,是指这里面的代码没有执行
subB = NULL;
}
if(subB != NULL)
{
int a = subB->getA();
}
}
解决方案 »
- 模态对话框什么时候不居中显示?
- 大家使用界面库GuiLib的时候,他原本的UNICODE大家怎么处理的
- ADO连接状态判断。
- 在一个类中定义另外一个类的指针问题
- ADSL拨号的原理是什么,怎样自己做一个拨号器呢?
- 对于套接字api函数send和recv返回错误(SOCKET_ERROR)后还有必要调用shutdown()吗?谢谢!
- CSocket编的图象传送程序只能传几次,接收端就无法再接收了,为什么?
- 急急急!!如何进行消息传递?(高分求解,分数可以再加)在线等...
- 帮忙看看这段程序
- ?某个程序需要键盘和鼠标输入,我想编个程序,不操作键盘和鼠标,在我的程序中实现向那个程序输入键盘和鼠标,请问如何实现?
- 关于Tab键顺序。(我的Tab键顺序完全倒过来了)
- 如何用CreateFile()函数打开一个没有盘符的分区的句柄?
__try
{}
__except(1)
{}
delete subA;
后面加上
subA = NULL;
也会抛出异常,这时subB和subC都成传说中的野指针了
//delete subA;
//subA = NULL;
//delete subA;
//subA = NULL;关于这个问题,是我的一个失误,刚才不小心把enable rtti关了
dynamic_cast 进行引用转换时才会抛异常