【问题标题】:c++ error - function cannot be overloaded [duplicate]c ++错误 - 函数不能重载[重复]
【发布时间】: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),其中abnode*,您希望编译器调用哪个版本?它怎么可能知道?
  • copy 的第二个版本没有任何意义。为什么要更改 onode 的值,然后对新值不做任何事情?我想你的意思是void copy(node **onode,node* cnode) { *onode=copy(*onode,cnode); }。这也将解决您的错误。

标签: c++


【解决方案1】:

只有根据重载规则,参数不同时,返回类型才能不同

【讨论】:

  • 在哪里可以阅读正式规则?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-08
  • 1970-01-01
  • 2015-11-06
相关资源
最近更新 更多