【发布时间】:2018-07-23 09:12:24
【问题描述】:
以下是用于复制二叉树的 C++ 代码。我正在尝试重载复制功能。我认为它应该可以工作,因为这两个函数的返回类型不同。
node* copy(node *onode,node *cnode)
{
if(root==NULL)
root=onode;
if(onode)
{
cnode=new node;
cnode->data=onode->data;
cnode->left=copy(onode->left,cnode->left);
cnode->right=copy(onode->right,cnode->right);
return cnode;
}
return cnode;
}
void copy(node *onode,node* cnode)
{
onode=copy(onode,cnode);
}
但是,我在编译时遇到以下错误。
错误:'void tree::copy(node*, node*)' 不能被重载 无效副本(节点 onnode,node cnode) 错误:使用'node* tree::copy(node*, node*)' 节点*复制(节点*onode,节点*cnode)
谢谢。
【问题讨论】:
-
如果我调用
copy(a, b),其中a和b是node*,您希望编译器调用哪个版本?它怎么可能知道? -
copy的第二个版本没有任何意义。为什么要更改onode的值,然后对新值不做任何事情?我想你的意思是void copy(node **onode,node* cnode) { *onode=copy(*onode,cnode); }。这也将解决您的错误。
标签: c++