尝试使用模板制作 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);
};
节点类型:
编辑:当我删除代码以取消阻止文本时,我忘记了构造函数,现在已经添加了
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>
并且它不匹配
答案 0 :(得分:8)
首先,您需要在赋值的RHS上完全指定类型,并且,由于您使用new
实例化动态分配的节点,因此LHS应该是指针:
BSTNode<int>* data = new BSTNode<int> (key, 10);
^ ^
如果您不需要节点指针,请使用
BSTNode<int> data(key, 10);
其次,你的BSTNode<T>
类没有构造函数接受int和Type
,所以你也需要提供它。
template <typename Type>
class BSTNode {
public:
BSTNode(int k, const Type& val) : key(k), data(val), left(0), right(0) { .... }
};