2012-04-15 97 views
0

在我的項目中,我嘗試重新加載全局運算符new和delete([])。當我嘗試在第一次編譯,我得到的鏈接錯誤:MS VC++編譯器模棱兩可

Main.obj : error LNK2005: "void * __cdecl operator new(unsigned int)" ([email protected]@Z) already defined in LIBCMTD.lib(new.obj)

當我試圖在第二次編譯,錯誤奇蹟般地消失! 但有時會返回。 如何解決此問題?

運行時庫:MTd。

代碼:

void operator delete(void * pointer){LALALA} 

或者

void __cdecl operator delete(void * pointer){LALALA} 

此錯誤返回時我遵循的步驟:

  1. 卸下重裝新的(其他)
  2. 編譯
  3. 一個獲得重裝
  4. 嘗試編譯並收到此錯誤

在其他情況下,錯誤消失。這是什麼原因?

+0

該文件首先編譯並出現此錯誤。第二次,錯誤沒有顯示,因爲如果文件未被修改,該文件不會被重新編譯。請發佈給你的錯誤。 – gulyan 2012-04-15 19:01:22

+0

@gulyan,已經。 – 2012-04-15 19:20:26

回答

-1

你必須隱含申報 '新' 和 '刪除' 靜態成員函數

void *的new操作符(爲size_t大小);

void operator delete(void * p);

+0

不,靜力學操作員新增和刪除無呼叫=( – 2012-04-16 17:58:29