引用指针错误。没有重载函数的实例

时间:2014-12-02 19:16:51

标签: c++ pointers binary-search-tree

错误是:没有重载函数的实例“BSTree :: Retrieve”匹配参数列表和对象(该对象具有阻止匹配的类型限定符)。

参数类型为:(intAccount*BSTree::Node*const

对象类型为:const BSTree

它说参数类型是Account *,但我将其作为Account *&acct

第一个参数是要检索的对象。第二个包含指向找到的对象的指针。

以下是代码:

bool BSTree::Retrieve(int ID, Account *&acct, Node *leaf)
{
    if(leaf != NULL)
    {
        if(ID == leaf->pAcct->getID())
        {
            acct = leaf->pAcct;
            return true;
        }
        if(ID < leaf->pAcct->getID())
        {
            return Retrieve(ID, acct, leaf->left);
        }
        else
        {
            return Retrieve(ID, acct, leaf->right);
        }
    }
    else
    {
        acct = NULL;
        return false;
    }
}

bool BSTree::Retrieve(int ID, Account *&acct) const
{
    return Retrieve(ID, acct, root);
}

2 个答案:

答案 0 :(得分:0)

  1. 您正在从const方法调用非const方法(可以修改对象)(不允许这样做)。这将是一个错误。

  2. 您确定要Account *&吗?从您的代码中,如果您想通过BSTree中的ID来检索节点,则需要Account*

  3. 这里的第1点see

    a.g(); // invokes an error because g() (which is const) calls f() which is non-const.
    

答案 1 :(得分:0)

Account *&acct是指向引用的指针。 这意味着acct将充当对作为参数给出的指针的引用。您的函数期望作为参数传递实际指针而不是现有引用。

你可以试试这个:

bool BSTree::Retrieve(int ID, Account *&acct) const
{
    Account* acctPtr = acct;
    return Retrieve(ID, acctPtr, root);
}

您可以查看类似案例here

除此之外,您尝试从 const 中调用非const 方法。您可以使用const_cast来解决此问题,但建议,因为它很危险,您应该搜索更好的替代方案(查看here了解更多信息)。