用以下代码在VS 2008 中检测内存泄漏时出现 error C2061: syntax error : identifier '_Wherenode'。
#ifdef _DEBUG
#ifndef DBG_NEW
#define DBG_NEW new (_NORMAL_BLOCK, __FILE__, __LINE__)
#define new DBG_NEW
#endif
#endif
原因是用到了#include<map>
必须要在#include<map> 之后添加以上用于检测内存泄漏的代码,如下
#include<map>
#ifdef _DEBUG
#ifndef DBG_NEW
#define DBG_NEW new (_NORMAL_BLOCK, __FILE__, __LINE__)
#define new DBG_NEW
#endif
#endif
另外,若是一个大的mfc工程,一般我们是在stdafx.h中添加检测内存泄漏的代码,此时就必须注意了,也许你是在某个其他的头文件里用到了#include<map>,而惯例上我们在写代码时#include "stdafx.h" 是放在第一行的(它也应该放在第一行,否则就失去了stdafx的作用),这样就造成了#include<map>是在 内存检测代码后包含的,同样会出现错误。
这也就是我们经常说的#include的顺序是有讲究的。
解决方法也很简单: 把#include<map>放到 stdafx.h 中就行了,当然要按照上文所说的顺序摆放。