C++ 尝试使用模板创建类的新实例,出现意外错误
尝试使用模板制作一个B初始S搜索Tree(简称BST) 当我尝试创建我的BST的新实例时,我遇到了一个意外错误。我希望解决方案不涉及指针,因为我希望将指针保持在最小值 目前我有: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
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) { .... }
};