VS2010 MFC:“Debug Assertion Failed!” ——自动生成的单文档程序项目编译运行就有错
来源:互联网 发布:知乎 大国崛起纪录片 编辑:程序博客网 时间:2024/06/05 16:32
今天照着孙鑫老师的VC++教程学习文件的操作,VS2010,单文档应用程序,项目文件命名为File,也就有了自动生成的CFileDoc、CFileView等类,一进去就编译运行(就是最初自动生成的项目),编译通过,可运行时直接弹出错误框,我啥也没做啊:
图一 错误提示框
后来搜索一查,网上好多类似的错误以及解决方案,几乎都试了个遍,有:
方法(1) —重新生成解决方案,或者将项目文件目录下Debug文件夹删了,重新生成Release版;
方法(2) —可以先声明一个临时的CString变量然后作为暂存,然后把你取得的值放入其中,之后再赋给另一个你要使用的变量。本项目最初是自动生成滴,无手动编写,固然无从下手~
方法(3) — 1、按F5编译运行程序,弹出以上程序中断对话框;
2、点击重试,程序自动定位到产生错误的语句:
图二 程序调试定位
可见,程序实在执行new CSingleDocTemple(...),也就是说创建在单文档应用程序类实例时发生了中断。根据错误提示信息,在本机VC的mfc文件目录下找到doctempl.cpp文件,定位到第29行的Assert语句,如下图:
图三 定位到doctempl.cpp中引发中断语句
可见,错误是由于Assert语句中的判断语句pViewClass==NULL 或者pViewClass->IsDerivedFrom(RUNTIME_CLASS(CView)其中之一成立而引发的中断,从而有了最初的错误信息框。
而pViewClass值是由图二程序中的RUNTIME_CLASS(CFileView)传进来的,RUNTIME_CLASS(class_name)是一个宏定义:
#define RUNTIME_CLASS(class_name)
((CRuntimeClass*)(&class_name::class##class_name))
就是为了得到类名为class_name中的指向运行时类结构CRuntimeClass的静态指针成员。通过设断点就知道其值不为空。 而后面一个条件语句是判断当前视图类CFileView是否是从CView里派生出来的,也就是说解决方案中的CFileView 类应该继承于MFC 的视图基类CView,程序是在这出了错。 后来在MSDN中找到了原因,巨坑~~~~~~~~~,引用里面的回答:
“出问题的地方是:
ASSERT(pViewClass == NULL ||
pViewClass->IsDerivedFrom(RUNTIME_CLASS(CView)));
这个断言要求 当前的视图类,也就是你解决方案中的FileView 类应该继承于MFC 的视图基类CView。 但是由于默认情况下在第二张选项卡,也就是选择应用程序模式(MDI、SDI、Dialog) 那个选项卡的右侧,默认的应用程序界面风格是VS 2008。 创建向导会将MFC的扩展界面库引入进来(也就是之前微软收购的BCG Library库)。这就改变了MFC 默认的继承结构,class CFileView : public CDockablePane FileView 类就不从CView类继承了,因此导致了断言错误。
简单的方法是:
在第二张选项卡上,右上部的界面风格选为windows。 就没有问题了。 ”
见:
http://social.msdn.microsoft.com/Forums/office/zh-CN/b8a44e9d-10d4-4f71-abb7-d30d35bdfba2/visual-studio-2010-?forum=visualcpluszhchs
问题解决~~~~
如果还不能解决的话,下面还有一种情况也很有可能,就是说:
“你的工程项目命名与MFC自带类有冲突,比如命名为File,则会自动生成一系列的形如CFileXXX的类,而MFC自带有许多名为CFileXXX的类,可能由于命名的冲突会引起一些难以察觉的错误,这里我也没有进一步深究了。。。”
因此在创建项目工程时,应尽量避免用一些敏感的名字,比如File,Object,Com等,不然有错误都不知道去哪找啊。
图一 错误提示框
后来搜索一查,网上好多类似的错误以及解决方案,几乎都试了个遍,有:
方法(1) —重新生成解决方案,或者将项目文件目录下Debug文件夹删了,重新生成Release版;
方法(2) —可以先声明一个临时的CString变量然后作为暂存,然后把你取得的值放入其中,之后再赋给另一个你要使用的变量。本项目最初是自动生成滴,无手动编写,固然无从下手~
方法(3) — 1、按F5编译运行程序,弹出以上程序中断对话框;
2、点击重试,程序自动定位到产生错误的语句:
图二 程序调试定位
可见,程序实在执行new CSingleDocTemple(...),也就是说创建在单文档应用程序类实例时发生了中断。根据错误提示信息,在本机VC的mfc文件目录下找到doctempl.cpp文件,定位到第29行的Assert语句,如下图:
图三 定位到doctempl.cpp中引发中断语句
可见,错误是由于Assert语句中的判断语句pViewClass==NULL 或者pViewClass->IsDerivedFrom(RUNTIME_CLASS(CView)其中之一成立而引发的中断,从而有了最初的错误信息框。
而pViewClass值是由图二程序中的RUNTIME_CLASS(CFileView)传进来的,RUNTIME_CLASS(class_name)是一个宏定义:
#define RUNTIME_CLASS(class_name)
((CRuntimeClass*)(&class_name::class##class_name))
就是为了得到类名为class_name中的指向运行时类结构CRuntimeClass的静态指针成员。通过设断点就知道其值不为空。 而后面一个条件语句是判断当前视图类CFileView是否是从CView里派生出来的,也就是说解决方案中的CFileView 类应该继承于MFC 的视图基类CView,程序是在这出了错。 后来在MSDN中找到了原因,巨坑~~~~~~~~~,引用里面的回答:
“出问题的地方是:
ASSERT(pViewClass == NULL ||
pViewClass->IsDerivedFrom(RUNTIME_CLASS(CView)));
这个断言要求 当前的视图类,也就是你解决方案中的FileView 类应该继承于MFC 的视图基类CView。 但是由于默认情况下在第二张选项卡,也就是选择应用程序模式(MDI、SDI、Dialog) 那个选项卡的右侧,默认的应用程序界面风格是VS 2008。 创建向导会将MFC的扩展界面库引入进来(也就是之前微软收购的BCG Library库)。这就改变了MFC 默认的继承结构,class CFileView : public CDockablePane FileView 类就不从CView类继承了,因此导致了断言错误。
简单的方法是:
在第二张选项卡上,右上部的界面风格选为windows。 就没有问题了。 ”
见:
http://social.msdn.microsoft.com/Forums/office/zh-CN/b8a44e9d-10d4-4f71-abb7-d30d35bdfba2/visual-studio-2010-?forum=visualcpluszhchs
问题解决~~~~
如果还不能解决的话,下面还有一种情况也很有可能,就是说:
“你的工程项目命名与MFC自带类有冲突,比如命名为File,则会自动生成一系列的形如CFileXXX的类,而MFC自带有许多名为CFileXXX的类,可能由于命名的冲突会引起一些难以察觉的错误,这里我也没有进一步深究了。。。”
因此在创建项目工程时,应尽量避免用一些敏感的名字,比如File,Object,Com等,不然有错误都不知道去哪找啊。
阅读全文
0 0
- VS2010 MFC:“Debug Assertion Failed!” ——自动生成的单文档程序项目编译运行就有错
- MFC:“Debug Assertion Failed!” ——自动生成的单文档程序项目编译运行就有错误
- MFC:“Debug Assertion Failed!” ——自动生成的单文档程序项目编译运行就有错误
- 有些情况下vc6.0 MFC程序运行时出现Debug Assertion Failed 的解决方法
- VS2010,XML,Debug Assertion Failed!
- 关于MFC中CComboBox变量 运行 出错 Debug Assertion Failed!
- MFC 单文档程序的运行过程
- MFC创建非模态对话框的debug assertion failed问题
- vs2010 程序语句有错,也报错了 却运行了以前的版本,怎么设置它有错就不要运行了呢?
- 读书笔记——Windows核心编程(2)禁止C运行时触发的所有Debug Assertion Failed对话框
- VC MFC OCX控件 Debug Assertion Failed!
- MFC程序出现“Debug Assertion Failed! File:dlgdata.cpp Line: 43 ”错误
- MFC程序出现“Debug Assertion Failed! File:afx.inl Line:177”错误
- 编译后运行,出现debug assertion failed!错误并转到ProcessShellCommand 函数
- 以CRichEditView为基类的MFC单文档程序向导建立后编译成功运行失败问题
- 关于MFC中的Debug Assertion Failed问题的一种可能的解决方法。
- Debug Assertion Failed
- debug assertion failed
- UNIX环境高级编程读书笔记(1)
- 顺序队列
- Unity 之MVC框架 StrangeIoC
- QPBOC电子现金与标准借贷记的脱机认证详细过程
- AVL的详细讲解
- VS2010 MFC:“Debug Assertion Failed!” ——自动生成的单文档程序项目编译运行就有错
- CSS3选择器和相关属性
- JAVA中的反射机制
- Jvm对象探秘
- 再来
- 模拟银行转账信息
- Windows中遇到不能创建 . 开头必须键入文件名
- 基因的富集分析
- OpenCV打开 内存buf中的图片