Ссылка на ошибку указателя. Нет экземпляра перегруженной функции

Ошибка: ни один экземпляр перегруженной функции «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

Решение

  1. Вы вызываете неконстантный метод (который может модифицировать объект) из константного метода (который не может этого делать). Это будет ошибка.

  2. Ты уверен что хочешь Account *& ? Из вашего кода, если вы хотите получить узел по его идентификатору из BSTree, вам понадобится Account*,

Для пункта 1 увидеть Вот.

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

Другие решения

Account *&acct это указатель на ссылку.
Это означает, что acct будет действовать как ссылка на указатель в качестве аргумента. То, что ваша функция ожидает в качестве аргумента, передает фактический указатель, а не существующую ссылку.

Вы можете попробовать это:

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

Вы можете посмотреть на похожий случай Вот.

Кроме того, вы пытаетесь вызвать неконстантная метод из Const один. Вы могли бы использовать const_cast для того, чтобы это исправить, но это НЕ рекомендуется, так как это опасно, и вы должны искать лучшие альтернативы (смотрите Вот для большего).

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector