2012-10-25 87 views
0

我想在OOP C以下應用程序,但我得到了我的new.h文件中的錯誤。意外*,意外(

我收到了一堆的「意外」的錯誤。 剛想後的一切第一 '無效' 的exepected。 任何想法?

#ifndef NEW_H 
#define NEW_H 

#ifdef __cplusplus 
extern "C" { 
#endif 

void * new (const void * type); 
void delete (void * item); 


#ifdef __cplusplus 
} 
#endif 



#endif /* NEW_H */ 

enter image description here

+3

你確定你在編譯C嗎? 'new'和'delete'是C++關鍵字,它看起來就是這樣的。 – Mysticial

+0

你想實現'new'和'delete'運算符嗎?如果是這樣,你應該添加'運營商'關鍵字。 – 2012-10-25 05:13:17

+2

OOP C究竟是什麼? C不是面向對象的。 – fayyazkl

回答

0

如果要在C中模擬new的功能,因爲它在C++中,那麼實際上會給出錯誤的參數new。 它應該是const unsigned intconst size_t 因爲新在C++作爲

int *p; 
p=new (sizeof(int)); 

但在這裏它的類型不匹配無法轉換intconst void *

對於delete這很好,因爲delete需要pointer作爲參數

+0

這裏的問題是使用c代碼和gcc編譯新函數名稱 – fayyazkl

+1

不知何故編譯器知道關鍵字new然後只有它給出了錯誤。是使用內置IDE還是單獨的編譯器和編輯器 – Omkant

+0

因爲在我的情況它沒有給出任何錯誤在Linux gcc-4.5 – Omkant

1

那麼你正在編譯爲C,但newdelete運營商只支持在C++中。

而且,newdelete簽名是:

void* operator new(size_t n); 
void operator delete(void* p); 

您也可以重載這些運營商的特定類(由宣稱他們在類中)。

+0

我認爲情況正好相反。 – glglgl

+0

在這個例子中,新的和刪除被定義爲新的方法。 –

+0

還有位置'new',數組'new',以及'new'上的其他變體。 –

1

新增和刪除是C++中的關鍵字,而不是合法的函數名稱。

即使你認爲你正在編譯C,測試它是否修復它。如果沒有,那麼它可能是經典的C/C++神祕的錯誤:問題是在之前的包括,它可能缺少分號或者其他東西。

+0

這是一個不是C++程序的c程序 –

+0

是您的文件擴展名.c?你是用c編譯器還是C++編譯器編譯的? – fayyazkl

+0

@fayyazkl是的,它是一個.c文件。我使用gcc來嘗試編譯它。 –

2

這似乎是在C++下無效的幾個C程序之一:標識符newdelete在C下是完全有效的,但在C++中保留。