私はクラスの一部として自由な関数を持っています。クラスのコンストラクタで私はいくつかの操作をしていますmalloc
操作。だからdestructor
私はその記憶を解放しようとしています。しかし、VS10コンパイラは文句を言い関数C++の標準ライブラリ関数のオーバーロード
free(pointer);
は私のクラスのフリー機能の署名と一致しないこと。
ですから、私たちが標準ライブラリ関数と同じ名前を持つメソッドを実装したクラスでは、 1つを他のものに呼び出す方法。
よろしく、
私はクラスの一部として自由な関数を持っています。クラスのコンストラクタで私はいくつかの操作をしていますmalloc
操作。だからdestructor
私はその記憶を解放しようとしています。しかし、VS10コンパイラは文句を言い関数C++の標準ライブラリ関数のオーバーロード
free(pointer);
は私のクラスのフリー機能の署名と一致しないこと。
ですから、私たちが標準ライブラリ関数と同じ名前を持つメソッドを実装したクラスでは、 1つを他のものに呼び出す方法。
よろしく、
:
void YourClass::free(args) {
::free(your_member);
}
これは、グローバル名前空間ではなく、あなたのクラスでfree
機能をピックアップします。
#include <cstdio>
もstd
名前空間にfree
とmalloc
を置きますので、std::free
とstd::malloc
も動作します。
(new
/delete
の使用も考えられ、同様にスマートポインタする必要があります。)
あなたはfree
機能の正確な範囲を取得するために、スコープ演算子を使用する必要があります。先頭に::
を持つ
::free(pointer);
がでfree
機能を探すようにコンパイラーに指示しますあなたのクラスである最も近いスコープではなく、グローバルスコープです。あなたは、関数へのお電話を修飾する必要があり
あなたは 'free'関数のシグネチャを投稿することができます。 –
1. 'new/delete'を使うべきです。 2.このコードは、さらにコメントするのに便利です。 –