【发布时间】:2018-03-08 16:50:47
【问题描述】:
我正在从事一个项目,其中我有一个帐户类,用于存储不同资金的余额。每个账户对象有 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);
}
}
我遇到的问题是当我存入帐户然后检索并尝试提取时,它没有给我相同的帐户。相反,它只是尝试从余额为 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 语句只是检查给定时间的交易类型。
【问题讨论】:
-
你觉得这条线有什么作用?
acctPtr = temp->pAcct;(提示:acctPtr 是什么?) -
感谢阅读链接,对以后的项目很有帮助。我对这一行的意图是将 Account 对象的指针设置为指向在搜索中找到的特定对象的指针。这样,当我进行交易时,它会修改检索到的值。
-
尝试在此处设置断点;检查它的值......然后越过返回,然后再次检查它的值
-
我能够使用给定的解决方案来解决它。谢谢大家的帮助,我还在学习指针的概念!
标签: c++ pointers tree binary-search-tree