woka

zz:mfc中使用标准库stl出现xdebug、xlocale错误的解决方法

mfc中使用标准库stl出现xdebug、xlocale错误的解决方法

参考:

在2005mfc的单文档框架中使用#include<fstream>编译出错

初學者想請問 xlocale 以及 xdebug

Debug errors in VC++ .NET (xdebug)

最近因为编程需要,需要在控制台程序中使用mfc的CString,在建立console工程的时候,选择了mfc选项,

结果在include标准库stl的头文件的时候,出现了一大堆的xdebug、xlocale错误,该问题我是第一次碰见,

在一番google搜索之后,找到了解决方法,特此做一个收藏

// 来源:http://social.msdn.microsoft.com/Forums/zh-TW/234/thread/e27da79b-ac38-4db8-a1d8-5536070590e9

// 正常的 头部:

#include "stdafx.h"
#include "OLE DOC Viewer.h"
#include "OLE DOC ViewerDlg.h"
#include ".\ole doc viewerdlg.h"
#include "selectiondlg.h"

#include "QQCrypt.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// #include <iostream>

// 但是如果把使用了 STL的文件的#include 放在后面就出问题!!!

=============================================================

=============================================================

// 解决方法
#include "stdafx.h"
#include "OLE DOC Viewer.h"
#include "OLE DOC ViewerDlg.h"
#include ".\ole doc viewerdlg.h"
#include "selectiondlg.h"

// 在这里包含标准库的相关头文件

#include <iostream>

using namespace std;


#ifdef _DEBUG
#define new DEBUG_NEW
#endif


#include "QQCrypt.h"

// 原因是DEBUG中,new被重载了!

正如上面得代码所说,在debug版下,new被重载(标准库stl内部对new进行了重载,两者互相冲突)

必须保证标准库include语句出现在

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

之前;

最简单的方法就是将所有的需要的stl的头文件放在stdafx.h文件中(预编译头文件),这样肯定能够保证stl

的头文件出现在上面的debug代码的前面

ps:当然我并不推荐这种方法,将所有的头文件都丢到stdafx.h中,这是一种不负责任的编码习惯,

“应该合理的安排头文件之间的依赖关系”--参见effective c++

posted on 2009-11-21 16:14 woka 阅读(607) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2009年11月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

导航

统计

常用链接

留言簿(2)

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜