2

ツリーまたはリスト構造のいずれかを作成するために使用されるクラスがあるとしましょう。それを呼びましょう

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>) ));
  }
};

これを行うと、次のコンパイラエラーが発生します。

テンプレートパラメータに依存する「malloc」への引数がないため、「malloc」の宣言が使用可能である必要があります(「-fpermissive」を使用する場合、G ++はコードを受け入れますが、宣言されていない名前の使用を許可することは非推奨です)。

非推奨のコードを使用せずにmallocをそのような方法で使用する方法はありますか?そこで、より高度なメモリ管理を行いたいので、newではなくmallocを使用したいと思います。

4

2 に答える 2

9

行方不明#include <cstdlib>または#include <stdlib.h>。コンパイラーは、宣言が欠落していることについて不平を言っています。それらのインクルードファイルは1つを提供します。

于 2012-05-08T12:39:04.920 に答える
3

コンパイラエラーは、それが何であるかの宣言がないことを示していますmalloc。その関数を宣言するインクルードがありません。

それ以外は、アプローチが壊れています。あなたは一般的なツリーを書いていますが、mallocあなたの使用のために、使用をPODタイプに制限しています(私はそれを想定してKおり、Vに格納されていますNode)。new代わりに、メモリを割り当てるだけでなく、型のコンストラクタを呼び出すを使用する必要があります。

于 2012-05-08T12:37:46.883 に答える