只有当参数中给出的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;
}
}
答案 0 :(得分:1)
考虑这个循环:
for( int i = 0; i < inventory.size(); i++ )
如果您在此循环中获得sku匹配,则会将该项目的额外副本添加到广告资源中。这有点奇怪,但如果您想在库存中使用同一指针的多个副本,那就太好了。
问题是在循环的迭代之后,循环将继续,它也将找到我们刚刚制作的副本,并看到它匹配,然后再次制作另一个副本。重复此过程直到阵列已满。