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> 和它不匹配
首先,你需要在赋值的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)