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!” ——自动生成的单文档程序项目编译运行就有错误的更多相关文章
- MFC单文档程序结构
MFC单文档程序结构三方面: Doc MainFrame View
- 使用jsdoc-toolkit来自动生成js api文档
近来前端组小盆友开发的类库越来越多,很多情况下彼此不知道写了些什么方法,为了更好的合作提高工作效率,找了个比较好的api文档生成方法.使用jsdoc-toolkit来自动生成js api文档. 一. ...
- MFC学习(七) 单文档程序
1 MFC单文档程序的主要类 (1)文档类(Document) 即应用程序处理的数据对象,文档一般从 MFC 中 CDocument 中派生.CDocument 类用于相应数据文件的读取以及存储 Cv ...
- VC-基础:MFC单文档程序架构解析
MFC单文档程序架构解析 这里我以科院杨老师的单文档程序来分析一下MFC单文档的程序架构,纯属个人见解,不当之处烦请指教! 首先我们了解到的是 图(一) theApp 是唯一一个在程序形成的时候就存在 ...
- MFC单文档程序架构解析
MFC单文档程序架构解析 MFC单文档程序架构解析 这里我以科院杨老师的单文档程序来分析一下MFC单文档的程序架构,纯属个人见解,不当之处烦请指教! 首先我们了解到的是 图(一) theApp 是唯一 ...
- qt 单文档程序关闭时在delete ui处出现segmentation fault
做了个显示图片的单文档程序. qt 单文档程序关闭时在delete ui处出现segmentation fault. 调试发现调用两次mainwindow析构函数. http://blog.csdn. ...
- Go学习笔记(六) | 使用swaggo自动生成Restful API文档(转)
关于Swaggo 或许你使用过Swagger, 而 swaggo就是代替了你手动编写yaml的部分.只要通过一个命令就可以将注释转换成文档,这让我们可以更加专注于代码. 目前swaggo主要实现了sw ...
- Golang使用swaggo自动生成Restful API文档
#关于Swaggo 相信很多程序猿和我一样不喜欢写API文档.写代码多舒服,写文档不仅要花费大量的时间,有时候还不能做到面面具全.但API文档是必不可少的,相信其重要性就不用我说了,一份含糊的文档甚至 ...
- OpenCASCADE(一) VS2017+OpenCASCADE+MFC 下载配置安装运行单文档程序画个基本图形
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/12368154.html 一.下载OpenCASCADE 官网下载是: http://www.o ...
随机推荐
- 移动pc常用Meta标签
移动常用 <meta charset="UTF-8"> <title>{$configInfos['store_title']}</title> ...
- 【剑指Offer】25、复杂链表的复制
题目描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节 ...
- 接口测试与Postman
阅读目录 1.接口测试简介 1.1 什么是接口测试 1.2 接口测试的必要性 1.3 接口测试流程 1.4 接口文档 1.5 接口测试用例设计 1.6 接口测试用例模板 2.Postman 2.1 ...
- C#第十一节课
类 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Thr ...
- top问题
1. 从10万个数中找10个最大的数 对于这种题目,最普通的想法是先对这10万个数进行排序,然后再选取数组中前10个数,即为最后的答案,排序算法的时间复杂度不下于O(N lgN).最好的方法是建立一个 ...
- js setTimeout函数
最近在看JS DOM编程艺术,在第十章的动画里面有个setTimeout函数的例子中涉及了很多的引号,研究了好大一会才看明白,综合网上各个大神的解释和自己的理解,其原理是这样的: 首先看下程序源代码: ...
- [bzoj1212][HNOI2004]L语言_AC自动机_动态规划
L语言 bzoj-1212 HNOI-2004 题目大意:给你一个n个单词的集合,然后给你m条字符串.问每条字符串可以被理解的最长前缀.被理解当且仅当存在一种分割使得每一段都是集合里的元素. 注释:$ ...
- Go语言net/http 解读.
Http包提供实现HTTP客户端和服务端的方法与函数. Get.Head.Post.PostForm配合使用实现HTTP请求: resp, err := http.Get("http://e ...
- IP地址的规划和设计方法(三)
九,内部网络专用IP地址规划与网络地址转换NAT方法 (1)内部网络的专用IP地址选择的根据 RFC1918在讨论内部网络的专用IP地址规划方法时任务.使用专用地址规划一个内部网络地址系统时.首选的方 ...
- Rails 异常处理 && 性能
Rails 异常处理 的多种处理方法 1. routes match '*path', via: :all, to: 'controller#action' 2. application.rb 的 ...