error C2065: DEBUG_NEW錯誤

用VC++的嚮導生成的類, 都帶有下面這幾行:


#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

有時在使用new操作符的時候就會提示錯誤error C2065: 'DEBUG_NEW ': undeclared identifier, 特別是在ATL/WTL中新定義類的時候, 在DEBUG版中出現, RELEASE中沒有問題.

解決辦法是兩個:

一. 直接將這幾行註釋掉

二. 在#define new DEBUG_NEW 之前定義:
 #define DEBUG_NEW new(THIS_FILE, __LINE__)

原因分析:

stdafx.h包含afxwin.h,afxwin.h又包含了afx.h, afx.h文件中有如下定義:
1. #if defined(_DEBUG) && !defined(_AFX_NO_DEBUG_CRT)
2.
3. // Memory tracking allocation
4. void* AFX_CDECL operator new(size_t nSize, LPCSTR lpszFileName, int nLine);
5. #define DEBUG_NEW new(THIS_FILE, __LINE__)
6. #if _MSC_VER > = 1200
7. void AFX_CDECL operator delete(void* p, LPCSTR lpszFileName, int nLine);
8. #endif

在第5行, 就出現了#define DEBUG_NEW new(THIS_FILE, __LINE__) , 所以, 如果是MFC程序, afxwin.h和afx.h都是包含了的, 但如果是ATL程序, 這兩個文件是沒有的, 故必然出錯.

那麼有時在MFC程序中也出現這種錯誤是怎麼回事呢?

有時你禁止預編譯頭stdafx, 系統找不到這個定義,就會報錯, 從而出現錯誤error C2065: 'DEBUG_NEW' : undeclared identifier

 

下面這個紅色字體你應該從你的CPP文件中找一下,錯誤提示的那個CPP文件開頭必然有這樣的預定義,這定義的意義就是上面所說,把他刪掉就沒有事了。

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#define new DEBUG_NEW

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章