MFC:“Debug Assertion Failed!” ——自动生成的单文档程序项目编译运行就有错误

今天照着孙鑫老师的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等,不然有错误都不知道去哪找啊。

MFC:“Debug Assertion Failed!”
——自动生成的单文档程序项目编译运行就有错误,布布扣,bubuko.com

MFC:“Debug Assertion Failed!”
——自动生成的单文档程序项目编译运行就有错误

时间: 2024-10-11 11:31:08

MFC:“Debug Assertion Failed!” ——自动生成的单文档程序项目编译运行就有错误的相关文章

VTk与MFC单文档程序联合编程

兴趣需要,想做下VTK与MFC想结合的程序,MFC快要在桌面程序上面失去市场份额了,现在大多使用QT来做,但是本科的时候学的就是MFC,也相对来说比较熟悉,所以就想使用MFC来写一个简单的单文档程序.首先我们需要在编译的时候将USEGUISUPPORT->USEMFC勾选上,才能在MFC平台上使用VTK.网络上现在大多流行两种VTK和MFC的方法,其实两者结合的关键就是将VTK的绘制窗口vtkrenderwindow与MFC中的view窗口相一致,让VTK上的绘制图形能够在MFC上的VIEW类上

MFC学习(七) 单文档程序

1 MFC单文档程序的主要类 (1)文档类(Document) 即应用程序处理的数据对象,文档一般从 MFC 中 CDocument 中派生.CDocument 类用于相应数据文件的读取以及存储 Cview 类所需要观察和处理的信息. (2)视类(View) 视相当于文档在应用程序中的观察窗口,它确定了用户对文档的观察方式和用户编辑文档的方式.对于图形来说视就好比我们进行绘图工作的画布,对图形的操作都是在视上进行的.另外,视类中有一个重要的成员函数 OnDraw() 函数.重载的 OnDraw(

SpringBoot2.0系列教程(六)Springboot框架添加Swagger2来在线自动生成接口的文档+测试功能

Hello大家好,本章我们添加Swagger2来在线自动生成接口的文档+测试功能.有问题可以联系我[email protected].另求各路大神指点,感谢 一:什么是Swagger Swagger是一款通过我们添加的注解来对方法进行说明,来自动生成项目的在线api接口文档的web服务. 二:添加Swagger2依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swag

单文档程序结构

创建过程 下面展示建一个单文档程序的过程,在MFC Application Wizard中第一步做如下选择 不妨Project style选择MFC stardard,Visual style and colors选择Windows Native/Default,其他的选项将创建不同样式的界面. 下一步Compound document support按默认选择None: 下一步是Document Template String文档模板字符串的设置,用于设置文档视结构的一些属性,如下 各选项的意

OpenCASCADE(一) VS2017+OpenCASCADE+MFC 下载配置安装运行单文档程序画个基本图形

原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/12368154.html 一.下载OpenCASCADE 官网下载是: http://www.opencascade.org/getocc/download/loadocc/ 我的百度云已经下载好的是: 链接:https://pan.baidu.com/s/1D-fw8vspKTOZ8GmAGBSVGw 提取码:mzp3 下载后运行完毕就是这样: 二.VS2017 MFC单文档配置OpenCA

SpringBoot + Swagger2 自动生成API接口文档

spring-boot作为当前最为流行的Java web开发脚手架,相信越来越多的开发者会使用其来构建企业级的RESTFul API接口.这些接口不但会服务于传统的web端(b/s),也会服务于移动端.在实际开发过程中,这些接口还要提供给开发测试进行相关的白盒测试,那么势必存在如何在多人协作中共享和及时更新API开发接口文档的问题. 假如你已经对传统的wiki文档共享方式所带来的弊端深恶痛绝,那么尝试一下Swagger2 方式,一定会让你有不一样的开发体验: 功能丰富 :支持多种注解,自动生成接

如何将OpenGL编程指南中的带main的源码改写成可以在MFC单文档编程中可以运行的程序

paradise.ezla.com.tw/files/article/html/220/220964/6363794.htmlparadise.ezla.com.tw/files/article/html/220/220964/6363866.htmlparadise.ezla.com.tw/files/article/html/220/220964/6363918.htmlparadise.ezla.com.tw/files/article/html/220/220964/6363984.ht

jsdoc注释规范工具(使用 JSDoc 3 自动生成 JavaScript API 文档)

安装和使用规范见:http://moodpo.com/archives/jsdoc3-tutorial.html 实例: /** * 模块调用方法 * * * @param {string} moduleName 模块名称 * @param {Function} callback 模块加载完成的回调,回调函数中会返回模块对象,方便内部调用 * @param {Boolean} isQueue 是否加入队列:在队列中的文件逐个加载(非异步) * @param {date} timeout 延时加载

Spring Boot 整合 swagger2 自动生成 RESTFul API 文档

1)首先编辑pom.xml添加依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>io.springfox</groupId>