2015-10-22 41 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' –