有关CObject的异常处理问题。

middle 2002-08-26 09:50:09
MFC中,无法throw在栈中的CObject的子类对象,比如下面的代码。

CFileException e;
throw e;

会报错:

e:\UserData\Project\Civ3\VC7\PatchGenerator\PatchGeneratorDlg.cpp(387) : error C2700: 'CFileException' : cannot be thrown (use /W4 for more info)
e:\UserData\Project\Civ3\VC7\PatchGenerator\PatchGeneratorDlg.cpp(387) : warning C4670: 'CFileException' : this base class is inaccessible

如果换成:

throw new CFileException;

或者

CFileException e;
throw &e;

就没有关系。
不过这样的异常处理好象不是很好。请问为什么CObject的子类会有这样的问题?
...全文
87 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
middle 2002-08-26
  • 打赏
  • 举报
回复
这个问题当然不影响工作进度。问题是为什么单单CObject的子类不能这样写?
不解 2002-08-26
  • 打赏
  • 举报
回复
??好象大多的都是CFileException e;
throw &e;
模式吧?!
middle 2002-08-26
  • 打赏
  • 举报
回复
大侠,太令人佩服了。
c_antinomy 2002-08-26
  • 打赏
  • 举报
回复
CFileException e;
throw e;

这将导致调用CFileException的缺省拷贝构造函数(编译器合成,因为CFileException中没定义),而所有的异常类都从CObject派生,而CObject
是不能拷贝的,所以会出错。这也是mfc中所有的自定义类型(从CObject派生
)都要抛出该类型指针的缘故。
middle 2002-08-26
  • 打赏
  • 举报
回复
有谁能够解释这个问题吗?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧