您的位置:首页 > 其它

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

2009-08-31 11:43 471 查看
参考:

在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++
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐