我不是一个熟练的C ++程序员,我在一个Visual Studio解决方案中得到了一个非常大的项目(实际上有24个)。
我从几乎所有的项目中得到了这个错误,我无法弄清楚如何解决它。
当我双击错误时,它会让我到这个地方:
for( int i = 0; i < nNewSize; i++ )
#pragma push_macro("new")
#undef new
::new((void*)(m_pData+i))TYPE;
#pragma pop_macro("new")
构建顺序输出给了我:
c:\program files (x86)\microsoft visual studio 11.0\vc\atlmfc\include\afxtempl.h(403): error C2661: 'operator new' : no overloaded function takes 2 arguments
19> c:\program files (x86)\microsoft visual studio 11.0\vc\atlmfc\include\afxtempl.h(368) : while compiling class template member function 'void CArray<TYPE,ARG_TYPE>::SetSize(INT_PTR,INT_PTR)'
19> with
19> [
19> TYPE=D2D1_GRADIENT_STOP,
19> ARG_TYPE=D2D1_GRADIENT_STOP
19> ]
19> c:\program files (x86)\microsoft visual studio 11.0\vc\atlmfc\include\afxtempl.h(643) : see reference to function template instantiation 'void CArray<TYPE,ARG_TYPE>::SetSize(INT_PTR,INT_PTR)' being compiled
19> with
19> [
19> TYPE=D2D1_GRADIENT_STOP,
19> ARG_TYPE=D2D1_GRADIENT_STOP
19> ]
19> c:\program files (x86)\microsoft visual studio 11.0\vc\atlmfc\include\afxtempl.h(355) : while compiling class template member function 'CArray<TYPE,ARG_TYPE>::~CArray(void)'
19> with
19> [
19> TYPE=D2D1_GRADIENT_STOP,
19> ARG_TYPE=D2D1_GRADIENT_STOP
19> ]
19> c:\program files (x86)\microsoft visual studio 11.0\vc\atlmfc\include\afxrendertarget.h(1028) : see reference to class template instantiation 'CArray<TYPE,ARG_TYPE>' being compiled
19> with
19> [
19> TYPE=D2D1_GRADIENT_STOP,
19> ARG_TYPE=D2D1_GRADIENT_STOP
19> ]
afxrendertarget.h的这一行是1028
CArray<D2D1_GRADIENT_STOP, D2D1_GRADIENT_STOP> m_arGradientStops;
我试图在我的脚本中注释:
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
但它没有效果。
请帮助我!
答案 0 :(得分:2)
您展示的一小段代码非常糟糕:如果将new
定义为
一个宏,你有未定义的行为,至少如果你包含任何
标准标题。
尽管如此,我认为编译器抱怨的是一些东西
称放置新。要使用它,您必须包含标题
<new>
。 (如果已将new
定义为宏,则不将起作用。
找到这个定义发生的地方,并摆脱它。)