我的代码类似于this thread中给出的代码。
template<class T>
class BinarySearchTree
{
private:
struct tree_node
{
tree_node* left;
tree_node* right;
T data;
tree_node( const T & thedata, tree_node * l = NULL, tree_node * r = NULL )
: data( thedata ), left( l ), right( r ) { }
};
tree_node* root;
public:
BinarySearchTree()
{
root = NULL;
}
}
在我的主程序中,需要这样做:
我有两棵树:
BinarySearchTree<T> tree1;
BinarySearchTree<T> tree2;
我需要创建一个新树:
根作为T的对象,左= tree1,右= tree2;
为此,我尝试添加此构造函数:
BinarySearchTree(const T& x, tree_node* l, tree_node* r);
并尝试从main拨打电话:
BinarySearchTree<T> newTree(T object,tree1,tree2);
我知道这行不通,但是我该怎么办?
编译错误:
错误C2664:'BinarySearchTree::BinarySearchTree(const T&,BinarySearchTree::tree_node *,BinarySearchTree::tree_node *)':无法将参数2从'BinarySearchTree *'转换为'BinarySearchTree::tree_node *'
最佳答案
首先:您对构造函数的调用不正确,应该是这样的:
BinarySearchTree<T> newTree(object,tree1,tree2);
我建议实现一个所谓的复制构造函数,即以相同类的实例作为参数的构造函数:
BinarySearchTree(const BinarySearchTree& other)
{
root = other.root; // propably you have to allocate it with "new"
}
这样您就可以从子节点创建新树。
希望我已经回答了您的问题,请随时询问是否还不够清楚! :)