错误35错误C2661:'operator new':没有重载函数需要2个参数

时间:2014-12-11 12:12:18

标签: c++ operator-overloading new-operator

我不是一个熟练的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

但它没有效果。

请帮助我!

1 个答案:

答案 0 :(得分:2)

您展示的一小段代码非常糟糕:如果将new定义为 一个宏,你有未定义的行为,至少如果你包含任何 标准标题。

尽管如此,我认为编译器抱怨的是一些东西 称放置新。要使用它,您必须包含标题 <new>。 (如果已将new定义为宏,则将起作用。 找到这个定义发生的地方,并摆脱它。)