错误是:没有重载函数的实例“BSTree :: Retrieve”匹配参数列表和对象(该对象具有阻止匹配的类型限定符)。
参数类型为:(int
,Account*
,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);
}
答案 0 :(得分:0)
您正在从const方法调用非const方法(可以修改对象)(不允许这样做)。这将是一个错误。
您确定要Account *&
吗?从您的代码中,如果您想通过BSTree中的ID来检索节点,则需要Account*
。
这里的第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了解更多信息)。