2015-10-22 36 views
0

我使用MSVC2008,写这样的事情(确切的代码是不同的,但是这仅仅是为了说明问题):MSVC2008 C++放置新的内置类型

void *p = NULL; 
int size = 12; 
... 
... 
p = malloc(size * sizeof(int)); 
if(p != NULL) 
{ 
    new ((int *)p) int[size]; 
} 
... 
((int*)p)[5] = 3; 

,而我得到以下编译错误:

error C2660: function 'operator new' does not take 2 arguments 

现在,当我使用我自己的类,并重载了我编写的新贴图时,此功能完美无缺。但是,内置的标准类型不是? 或者我错过了什么?

P.S.我这样做是因为我必须和我知道有其他选择,所以请和我一起裸照。

+0

我编译罚款。尝试编译这个确切的代码,而不是你的原始代码,看看是否仍然出现错误消息。如果没有,你的例子是有缺陷的。 – Downvoter

+0

你是否重载了全局'operator new'函数?然后,您需要为“展示位置”参数添加第二个参数。 –

+3

您是否包含''? – ameyCU

回答

1

感谢,ameyCU ... 它缺少

#include <new> 

现在编译罚款:)

+2

自从1998年它被标准化以来,C++没有任何标准的带有'.h'后缀的头文件。 –

+0

['#include '](http://en.cppreference.com/w/cpp/header/new ),而不是'new.h' –