たとえば、ツリー構造またはリスト構造の作成に使用されるクラスがあります。のは、これによりテンプレートクラスのコンストラクタでのmallocの使用
template <typename K, typename V>
class Node{
// some data
Node<K,V>* next;
Node() {
next = static_cast<Node<K,V>*>(malloc(sizeof(Node<K,V>)));
}
};
それを呼ぶことにしましょう、私は次のコンパイラエラーを取得する:
there are no arguments to 'malloc' that depend on a template parameter, so a declaration of 'malloc' must be available (if you use '-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)
は推奨されないコードを使用することなく、このような方法で、malloc関数を使用する方法はありますか?新しいメモリではなくmallocを使いたいのですが、そこではより高度なメモリ管理をしたいのです。
これは珍しい 'Node'クラスです。次のノードを自動的に割り当てるリンクされたリストノードのように見えますが、これは通常の状況下では無限再帰を引き起こしますが、実際には作成しているオブジェクトのコンストラクタを呼び出さない 'malloc'を使用しています再帰を停止します。これが本当にスマートなのかどうかは分かりません。 –
cstdlibを含めて単に欠落していないと確信していますか? (そして 'std :: malloc'と言っていますか?) – Mat
malloc関数を宣言するstdlib.hを含めていないようです。 –