gpt4 book ai didi

C++ - 使用链表和一次执行一个函数的类的程序

转载 作者:行者123 更新时间:2023-11-28 04:28:22 25 4
gpt4 key购买 nike

我正在编写一些简单的 C++ 管理程序,它有一个仓库类,其中包含存储为链表的产品列表。它的输出有两个问题:

  1. 输出 id/s 与输入不同(但也相似)
  2. 有两个不同的打印函数,但在运行程序时只执行一个(如果我注释另一个,它们都可以运行)

由于程序编译没有任何错误,我试图逐行调试它,但似乎无法弄清楚

编辑:要明确大学项目的这一部分,我不能使用标准库中准备好的东西,比如 (std::vector, std::list, ...) 我需要手动实现链表

    #include <iostream>
#include <iomanip> // std::setw

struct product {
int id;
int num;
product* next;
};

class warehouse{
private:
product* list = new product;
public:
warehouse() = default;

//adding a product to warehouse
void AddProduct(const int id,const int boxes) {
auto* item = new product;
auto* tmp = new product;
// copy the head of the linked list
tmp = list;
item->id = id;
item->num = boxes;
item->next = tmp;
//add the the new product at the beginning
list = item;
}

//print all products
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;
}
}

//print products that have less than 50 box and need resupply
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";
}
};

int main(){
/* Problems:
* Generating random id instead of using the given values
* Execute only one function at a time meaning if I commented printlist it's print the supply report as expected
*/
warehouse w1;
w1.AddProduct(005,50);
w1.AddProduct(007,70);
w1.AddProduct(055,30);
w1.printlist();
w1.SupplyReport();
return 0;
}

最佳答案

首先:

    private:
product* list = new product;

这很奇怪。为什么要创建一个毫无意义的 product 并让 list 指向它?

下一步:

            auto* tmp = new product;
// copy the head of the linked list
tmp = list;

您希望tmp 指向list 还是指向您创建和分配的新产品?它可以做这两件事中的任何一件,但不能同时做这两件事——它只是一个指针。你想让它指向什么?

下一步:

        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)

最后:

        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 指向的同一事物吗?还是您希望它指向一个新产品?它不能同时做到这两点。

当您需要 while(tmp) 时,您再次拥有 while(list)

关于C++ - 使用链表和一次执行一个函数的类的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53689483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com