函数调用另一个函数给出了错误的输出c ++?

时间:2014-02-28 02:15:07

标签: c++ arrays function output

只有当参数中给出的sku字符串与“inventory”数组的成员(数组类型为* Product且大小为50)匹配时,incrementStock函数才会调用“addProduct”函数。我在构造函数中将数组初始化为nullptr。 “num”是增量编号。 当我测试它并输入一个有效的sku来增量库时,我从addproduct函数中得到“无空间”。

void Supplier::addProduct(Product *p)
{
bool space = false;
int counter=0;
        while(!space && counter < inventory.size() )
        {
                if(inventory[counter] == nullptr )
                {
                        inventory[counter] = p;
                        space = true;
                }
        counter++;
        }

        if (!space)
        {
                cout << "no space" << endl;
        }

}


void Supplier::incrementStock(const string &sku, int num)
{
bool found = false;
        for( int i = 0; i < inventory.size(); i++ )
        {
                if( inventory[i] && sku == inventory[i]->getSKU())
                {
                        found=true;
                        addProduct(inventory[i]);
                        inventory[i]->setQuantity(inventory[i]->getQuantity() +num);
                }
        }

        if (found ==false)
        {
                cout << "not found" << endl;
        }
}

1 个答案:

答案 0 :(得分:1)

考虑这个循环:

    for( int i = 0; i < inventory.size(); i++ )

如果您在此循环中获得sku匹配,则会将该项目的额外副本添加到广告资源中。这有点奇怪,但如果您想在库存中使用同一指针的多个副本,那就太好了。

问题是在循环的迭代之后,循环将继续,它也将找到我们刚刚制作的副本,并看到它匹配,然后再次制作另一个副本。重复此过程直到阵列已满。