2012-02-03 32 views
2

我有一個免費的函數作爲類的一部分。在類的構造函數中,我正在做一些malloc操作。所以在destructor我試圖釋放內存。但VS10編譯器抱怨函數C++中的標準庫函數的重載

free(pointer); 

不匹配我班的自由功能的簽名。

所以問題是在一個類中,如果我們已經實現了與標準庫函數名稱相同的方法。如何相互呼叫。

問候,

+0

你可能想發佈你的'free'函數的簽名。 – 2012-02-03 08:29:01

+4

1.你應該使用'new/delete'。 2.代碼可能有助於進一步評論。 – 2012-02-03 08:29:06

回答

3

你應該有資格您的來電功能:

void YourClass::free(args) { 
    ::free(your_member); 
} 

這將拿起free功能在全局命名空間,而不是在你的類。

#include <cstdio>也使freemallocstd命名空間,因此std::freestd::malloc也會起作用。

(的new/delete使用,也應考慮,以及智能指針。)

6

你必須使用範圍操作,以獲得free功能的正確範圍:

::free(pointer); 

::開頭告訴編譯器查找在該free功能全球範圍,而不是你班上最接近的範圍。