2

テンプレートを使用してバイナリ検索ツリー (略して BST) を作成しようとています。

BST の新しいインスタンスを作成しようとすると、予期しないエラーが発生します。ポインターを最小限に抑えたいので、解決策にポインターが含まれていないことを願っています。

今のところ私は持っています:

template <typename Type>
class BST {                 // The binary search tree containing nodes
private:
    BSTNode<Type> *root;    // Has reference to root node

public:
    BST ();
    bool add (int, Type);
};

ノードタイプ:

編集:コードを切り取ってテキストを邪魔しないようにするときに、コンストラクターを忘れていましたが、追加されました

template <typename Type>
class BSTNode {    // Binary Search Tree nodes
private:
    int key;       // we search by key, no matter what type of data we have
    Type data;
    BSTNode *left;
    BSTNode *right;

public:
    BSTNode (int, Type&); 
    bool add (int, Type);
};

EDIT2:これが実際のコンストラクターです

template <typename Type>
BSTNode<Type>::BSTNode (int initKey, Type &initData) {
     this->key = initKey;
     this->data = initData;
     this->left = NULL;
     this->right = NULL;
}

何かが機能するかどうか、または機能しないかどうかを試してテストしたい

BSTNode<int> data = new BSTNode (key, 10);

そして、次のようになります: BSTNode の前に型指定子が必要です。何が間違っているのかわかりませんが、データをポインターとして使用する必要がないことを願っています。

BSTNode<int> data = new BSTNode<int> (key, 10);

また、機能しない、そう信じているようで、< int >一致< & int> しない

4

1 に答える 1

8

まず、割り当ての RHS で型を完全に指定する必要があります。また、動的に割り当てられたノードを でインスタンス化しているためnew、LHS はポインターである必要があります。

BSTNode<int>* data = new BSTNode<int> (key, 10);
            ^                     ^

ノード ポインタが必要ない場合は、次を使用します。

BSTNode<int> data(key, 10);

第二に、あなたのBSTNode<T>クラスには int と a を取るコンストラクターがないTypeので、それも提供する必要があります。

template <typename Type>
class BSTNode {
 public:
  BSTNode(int k, const Type& val) : key(k), data(val), left(0), right(0) { .... }
};
于 2012-06-13T09:16:25.487 に答える