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

C++ 尝试使用模板创建类的新实例,出现意外错误,c++,templates,pointers,binary-search-tree,C++,Templates,Pointers,Binary Search Tree,尝试使用模板制作一个B初始S搜索Tree(简称BST) 当我尝试创建我的BST的新实例时,我遇到了一个意外错误。我希望解决方案不涉及指针,因为我希望将指针保持在最小值 目前我有: template <typename Type> class BST { // The binary search tree containing nodes private: BSTNode<Type> *root; // Has referenc

尝试使用模板制作一个B初始S搜索Tree(简称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);
};
模板
类BST{//包含节点的二叉搜索树
私人:
BSTNode*root;//引用了根节点
公众:
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);
};
模板
类BSTNode{//二叉搜索树节点
私人:
int key;//我们按键搜索,不管我们有什么类型的数据
类型数据;
节点*左;
节点*对;
公众:
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::BSTNode(int initKey、Type和initData){
此->键=初始化键;
这->数据=初始数据;
此->左=空;
此->右=空;
}
我想试着测试一下是否有任何东西起作用/不起作用

BSTNode<int> data = new BSTNode (key, 10);
BSTNode数据=新的BSTNode(键,10);
我得到:BSTNode之前的预期类型说明符。我不知道我做错了什么,但我确实希望我不必使用数据作为指针

BSTNode<int> data = new BSTNode<int> (key, 10);
BSTNode数据=新的BSTNode(键,10);

也不起作用,似乎它认为
,并且它不匹配。首先,您需要在分配的RHS上完全指定类型,并且,由于您正在使用
new
实例化动态分配的节点,因此LHS应该是一个指针:

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

忘记粘贴了,现在是这样,有什么错误吗?@Kalec构造函数还可以,但最好使用初始值设定项列表来避免不必要的默认初始化/赋值。@Kalec和您可能不想在构造函数中按值传递
Type
。好的,但我仍然有同样的问题,因为构造函数已经在那里了,所以它什么也没改变。我不知道为什么会出现编译错误。@Kalec我在答案顶部给出的原因是什么?
BSTNode<int> data(key, 10);
template <typename Type>
class BSTNode {
 public:
  BSTNode(int k, const Type& val) : key(k), data(val), left(0), right(0) { .... }
};