Первый:
private:
product* list = new product;
Это странно.Почему вы создаете бессмысленный product
и указываете на него list
?
Далее:
auto* tmp = new product;
// copy the head of the linked list
tmp = list;
Вы хотите, чтобы tmp
указывал на list
или выхотите, чтобы он указывал на new product
, который вы создаете и выделяете?Он может выполнять любую из этих двух вещей, но не может делать и то и другое - это только один указатель.На что вы хотите, чтобы он указывал?
Далее:
void printlist() {
int i=0;
product* tmp;
tmp = list;
while(list) {
i++;
std::cout << "item n." << i << "\tid: " << tmp->id << " number of items: " << tmp->num << std::endl;
tmp = tmp -> next;
}
}
У вас есть while(list)
, но вы хотите while(tmp)
.
Last:
void SupplyReport(){
product* tmp = new product;
tmp = list;
int i=0;
while(list) {
if (tmp->num <= 50) {
i++;
std::cout << i << ". id:" << tmp->id << std::setw(20) << "N. of Boxes:" << tmp->num << std::endl;
}
tmp = tmp -> next;
}
if (i==0)
std::cout << "No product/s need re-supply";
}
Опять же, у вас есть tmp
точка на new products
, а затем вы устанавливаете ее равной list
.Вы хотите, чтобы tmp
указывал на то же самое, на что list
указывает?Или вы хотите, чтобы он указывал на new product
?Это не может сделать оба.
У вас снова есть while(list)
, когда вы хотите while(tmp)
.