2012-02-03 17 views
2

私はクラスの一部として自由な関数を持っています。クラスのコンストラクタで私はいくつかの操作をしていますmalloc操作。だからdestructor私はその記憶を解放しようとしています。しかし、VS10コンパイラは文句を言い関数C++の標準ライブラリ関数のオーバーロード

free(pointer); 

は私のクラスのフリー機能の署名と一致しないこと。

ですから、私たちが標準ライブラリ関数と同じ名前を持つメソッドを実装したクラスでは、 1つを他のものに呼び出す方法。

よろしく、

+0

あなたは 'free'関数のシグネチャを投稿することができます。 –

+4

1. 'new/delete'を使うべきです。 2.このコードは、さらにコメントするのに便利です。 –

答えて

3

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

これは、グローバル名前空間ではなく、あなたのクラスでfree機能をピックアップします。

#include <cstdio>std名前空間にfreemallocを置きますので、std::freestd::mallocも動作します。

new/deleteの使用も考えられ、同様にスマートポインタする必要があります。)

6

あなたはfree機能の正確な範囲を取得するために、スコープ演算子を使用する必要があります。先頭に::を持つ

::free(pointer); 

がでfree機能を探すようにコンパイラーに指示しますあなたのクラスである最も近いスコープではなく、グローバルスコープです。あなたは、関数へのお電話を修飾する必要があり

関連する問題