1

当我调用 addBranch 函数时,我想将我的数组扩展一,然后将新的 Branch 对象添加到该扩展的空白区域,并且我试图防止我的代码发生内存泄漏。我以为我做得对,但我被这个功能困住了。

它给了我错误“二进制'=':找不到运算符,它采用'Branch *'类型的右手操作数(或没有可接受的转换) ”。我需要一些帮助,将最后一个元素分配给一个新的 Branch 对象,该对象在功能消除后不会被删除。我只是 C++ 的新手,所以可能会有一些大错误。我不允许使用向量等。

  // ------- Adds a branch to system -------- //
    void BankingSystem::addBranch(const int id, const string name){
        if(isBranchExisting(id)){
            cout << "\n\tBranch " << id << " already exists. Please try it with another id number.";
        }
        else if(!isBranchExisting(id)){
            Branch* tempArray = new Branch[cntAccounts];
            for(int i = 0; i<cntAccounts; i++){
                tempArray[i] = allBranches[i];
            }

            delete[] allBranches;

            allBranches = new Branch[cntAccounts+1];
            for(int i = 0; i<cntAccounts; i++){
                allBranches[i] = tempArray[i];
            }
            allBranches[cntAccounts] = new Branch(id, name);  // error at this line

        }
    }
4

1 回答 1

3

正如错误消息所说,您正在尝试将指针分配给对象。您(可能)想要分配一个对象:

allBranches[cntAccounts] = Branch(id, name); // no "new"

我还建议您使用std::vector<Branch>而不是手工伪造的数组。这将修复由于忘记删除而导致的内存泄漏tempArray,或者如果您确实添加了缺失的内容,则会引发异常delete[]

此外,如果你确实使用vector,那么整个舞蹈可以替换为

allBranches.push_back(Branch(id, name));
于 2013-04-05T17:09:23.660 回答