参考:
在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++