今天照着孙鑫老师的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!” ——自动生成的单文档程序项目编译运行就有错误的更多相关文章

  1. MFC单文档程序结构

    MFC单文档程序结构三方面: Doc MainFrame View

  2. 使用jsdoc-toolkit来自动生成js api文档

    近来前端组小盆友开发的类库越来越多,很多情况下彼此不知道写了些什么方法,为了更好的合作提高工作效率,找了个比较好的api文档生成方法.使用jsdoc-toolkit来自动生成js api文档. 一.  ...

  3. MFC学习(七) 单文档程序

    1 MFC单文档程序的主要类 (1)文档类(Document) 即应用程序处理的数据对象,文档一般从 MFC 中 CDocument 中派生.CDocument 类用于相应数据文件的读取以及存储 Cv ...

  4. VC-基础:MFC单文档程序架构解析

    MFC单文档程序架构解析 这里我以科院杨老师的单文档程序来分析一下MFC单文档的程序架构,纯属个人见解,不当之处烦请指教! 首先我们了解到的是 图(一) theApp 是唯一一个在程序形成的时候就存在 ...

  5. MFC单文档程序架构解析

    MFC单文档程序架构解析 MFC单文档程序架构解析 这里我以科院杨老师的单文档程序来分析一下MFC单文档的程序架构,纯属个人见解,不当之处烦请指教! 首先我们了解到的是 图(一) theApp 是唯一 ...

  6. qt 单文档程序关闭时在delete ui处出现segmentation fault

    做了个显示图片的单文档程序. qt 单文档程序关闭时在delete ui处出现segmentation fault. 调试发现调用两次mainwindow析构函数. http://blog.csdn. ...

  7. Go学习笔记(六) | 使用swaggo自动生成Restful API文档(转)

    关于Swaggo 或许你使用过Swagger, 而 swaggo就是代替了你手动编写yaml的部分.只要通过一个命令就可以将注释转换成文档,这让我们可以更加专注于代码. 目前swaggo主要实现了sw ...

  8. Golang使用swaggo自动生成Restful API文档

    #关于Swaggo 相信很多程序猿和我一样不喜欢写API文档.写代码多舒服,写文档不仅要花费大量的时间,有时候还不能做到面面具全.但API文档是必不可少的,相信其重要性就不用我说了,一份含糊的文档甚至 ...

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

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/12368154.html 一.下载OpenCASCADE 官网下载是: http://www.o ...

随机推荐

  1. AI:IPPR的数学表示-CNN结构进化(Alex、ZF、Inception、Res、InceptionRes)

    前言: 文章:CNN的结构分析-------:  文章:历年ImageNet冠军模型网络结构解析-------: 文章:GoogleLeNet系列解读-------: 文章:DNN结构演进Histor ...

  2. 测试 Zoundry Raven

    安装很方便,看看发布的内容是否好用 但发现从博客上取下来的内容是有问题的,不能正常打开

  3. vue货币格式化组件、局部过滤功能以及全局过滤功能

    一.在这里介绍一个vue的时间格式化插件: moment 使用方法: .npm install moment --save. 2 定义时间格式化全局过滤器 在main.js中 导入组件 import ...

  4. BZOJ 5466: [Noip2018]保卫王国 动态DP

    Code: // luogu-judger-enable-o2 #include<bits/stdc++.h> #define ll long long #define lson (now ...

  5. 【转载】MySQL之CONCAT()的用法

    mysql CONCAT()函数用于将多个字符串连接成一个字符串,是最重要的mysql函数之一,下面就将为您详细介绍mysql CONCAT()函数,供您参考 mysql CONCAT(str1,st ...

  6. jquery获取当前时间并且格式化

    Date.prototype.Format = function (fmt) {      var o = {          "M+": this.getMonth() + 1 ...

  7. python的自动化测试报告

    #coding=utf-8import HTMLTestRunnerimport BeautifulReportimport unittestclass MyTest(unittest.TestCas ...

  8. 继续聊WPF——为ListView的行设置样式

    <Window x:Class="Wpf_GridHeaderStyle_sample.Window1" xmlns="http://schemas.microso ...

  9. ELK之Logstash配置文件详解

    Logstash 是一个开源的数据收集引擎,它具有备实时数据传输能力.它可以统一过滤来自不同源的数据,并按照开发者的制定的规范输出到目的地.它以插件的形式来组织功能,通过配置文件来描述需要插件做什么, ...

  10. 项目部署到tomcat出错(tomcat运行时的JDK版本)

    先展示一下错误,把项目部署到tomcat运行 出错原因 简单来说,就是执行代码的jdk版本 低于 编译的jdk版本 最后面的52.0是一种叫什么魔码,有各自对应的jdk版本. 其中52.0 对应的就是 ...