尝试使用模板创建新的类实例,意外错误

Kal*_*lec 2 c++ templates pointers binary-search-tree

尝试使用模板制作B inary S earch T ree(简称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);
};
Run Code Online (Sandbox Code Playgroud)

和节点类型:

编辑:当我删除代码以解除对文本的阻碍时,我忘记了构造函数,现在它被添加了

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);
};
Run Code Online (Sandbox Code Playgroud)

EDIT2:这是实际的构造函数

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

我想尝试测试是否有效/无效

BSTNode<int> data = new BSTNode (key, 10);
Run Code Online (Sandbox Code Playgroud)

我得到:BSTNode之前的预期类型说明符.我不知道我做错了什么,但我希望有一件事我不必将数据用作指针.

BSTNode<int> data = new BSTNode<int> (key, 10);
Run Code Online (Sandbox Code Playgroud)

也不起作用,似乎它相信< int >< & int> 和它不匹配

jua*_*nza 8

首先,你需要在赋值的RHS完全指定类型,而且,因为你是用实例化一个动态分配的节点new时,LHS应该是一个指针:

BSTNode<int>* data = new BSTNode<int> (key, 10);
            ^                     ^
Run Code Online (Sandbox Code Playgroud)

如果您不需要节点指针,则使用

BSTNode<int> data(key, 10);
Run Code Online (Sandbox Code Playgroud)

其次,你的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) { .... }
};
Run Code Online (Sandbox Code Playgroud)