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

参考:

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

初學者想請問 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

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

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

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

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

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

#include

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++

你可能感兴趣的:(C++學習)