C++ c++;从树中检索对象

C++ c++;从树中检索对象,c++,pointers,tree,binary-search-tree,C++,Pointers,Tree,Binary Search Tree,我正在从事一个项目,在这个项目中,我有一个account类存储不同资金的余额。每个账户对象有10笔资金,从0开始,可以进行存款、取款和转账等交易。在添加这些帐户时,我需要将它们存储在二元搜索树中,并且我的检索功能有问题。代码如下: bool Retrieve(const int & acctNum, Account* acctPtr) { if (Search(root, acctPtr, acctNum)) return true; else

我正在从事一个项目,在这个项目中,我有一个account类存储不同资金的余额。每个账户对象有10笔资金,从0开始,可以进行存款、取款和转账等交易。在添加这些帐户时,我需要将它们存储在二元搜索树中,并且我的检索功能有问题。代码如下:

bool Retrieve(const int & acctNum, Account* acctPtr)
{
    if (Search(root, acctPtr, acctNum))
        return true;
    else
        return false;
}

bool Search(Node* temp, Account* acctPtr, int acctNum)
{
    if (temp == NULL) {
        return false;
    }
    else if (temp->pAcct->getAcct() == acctNum)
    {
        acctPtr = temp->pAcct;
        return true;
    }
    else if (acctNum <= temp->pAcct->getAcct())
    {
        return Search(temp->left, acctPtr, acctNum);
    }
    else
    {
        return Search(temp->right, acctPtr, acctNum);
    }
}
bool检索(const int&acctNum,Account*acctPtr)
{
if(搜索(根、acctPtr、acctNum))
返回true;
其他的
返回false;
}
布尔搜索(节点*temp,帐户*acctPtr,内部acctNum)
{
if(temp==NULL){
返回false;
}
否则如果(临时->打包->getAcct()==acctNum)
{
acctPtr=temp->pAcct;
返回true;
}
else if(acctNum pAcct->getAcct())
{
返回搜索(临时->左,acctPtr,acctNum);
}
其他的
{
返回搜索(临时->右侧,acctPtr,acctNum);
}
}
我遇到的问题是,当我把钱存入这个账户,然后再取回并试图取款时,它并没有给我相同的账户。相反,它只是试图从余额为0的账户中提款。我的目的是让acctPtr指向正确的帐户,以便进行转账/取款/存款。下面是我如何从用于完成事务的其他类调用检索:

    if (transType == "D")
    {
        iss >> acctNum >> amt;
        fund = parseCommand(acctNum);
        acctNum = acctNum.substr(0, acctNum.length() - 1);

        Account * d = new Account("name", stoi(acctNum));
        if (bST->Retrieve(stoi(acctNum), d))
        {
            d->deposit(fund, amt);
            cout << d->getFundBalance(fund) << endl; //for checking, will remove
        }
    }
    else if (transType == "W")
    {
        iss >> acctNum >> amt;
        fund = parseCommand(acctNum);
        acctNum = acctNum.substr(0, acctNum.length() - 1);

        Account * wD = new Account("name", stoi(acctNum));
        if (bST->Retrieve(stoi(acctNum), wD))
        {
            wD->withdraw(fund, amt);
            cout << wD->getFundBalance(fund) << endl; //for checking, will remove
        }
    }
if(transType==“D”)
{
国际空间站>>账户>>金额;
资金=解析命令(acctNum);
acctNum=acctNum.substr(0,acctNum.length()-1);
账户*d=新账户(“名称”,stoi(账户));
如果(bST->检索(stoi(acctNum),d))
{
d->存款(资金、金额);
无法获取资金余额(基金)>账户>>金额;
资金=解析命令(acctNum);
acctNum=acctNum.substr(0,acctNum.length()-1);
账户*wD=新账户(“名称”,stoi(账户));
如果(bST->检索(stoi(acctNum),wD))
{
wD->提取(资金、金额);

cout getFundBalance(fund)在搜索函数中,使用参数acctPtr作为输出(为其指定了一个新值)

但指针不是输出参数

您应该使用帐户**或帐户*&

您必须使用如下检索方法:

Account* d = NULL;
if(bST->Retrieve(stoi(acctNum),&d /* or just d if Account*& */))
{ ... }
如果您使用Account**版本,请不要忘记使用

*acctPtr = temp->pAcct;

你认为这行是做什么的?
acctPtr=temp->pAcct;
(提示:什么是acctPtr?)旁白:您应该阅读感谢您提供的阅读链接,这将对未来的项目有所帮助。我此行的目的是将Account对象的指针设置为指向搜索中找到的特定对象的指针。这样,当我进行事务处理时,它会修改检索到的值。请尝试在此处放置断点;检查其值ue…然后通过返回,然后检查其值againI能够使用给定的解决方案解决它。感谢您的帮助,我仍在学习指针的概念!感谢您的帮助,这解决了我的问题。我对指针还是新手,因此我感谢您的澄清!