【问题标题】:Trouble with classes and adding objects类和添加对象的问题
【发布时间】:2017-09-01 14:29:44
【问题描述】:

我在上课时遇到问题。所以我有三个不同的类别:商店、客户和产品。在商店类中,我希望能够添加一个客户。问题是我需要添加客户的方式不遵循在 customer.h 中调用客户的方式。 这是我从 store.h 得到的:

void addCustomer(int customerID, string customerName);

在 customer.h 我有:

Customer();
Customer(string name, int customerID, bool credit);

在 customer.cpp 我有:

Customer::Customer(string name, int customerID, bool credit) :
name(name), customerID(customerID), credit(credit){}

在 store.cpp 我有以下内容:

void Store::addCustomer(int customerID, string customerName){
    bool credit = false;
    Customer addCustomer(int customerID, string customerName);
    Customer* customer = new Customer(name = "Null", customerID = 0, credit);
    customers.push_back(customer);

    for (int i = 0; i < customers.size(); ++i) {
        if (customers.at(i)->getID() == customerID){
            throw runtime_error("Customer already added.");
        }

    }
}

如果客户已被添加到向量中,则会引发异常。其他一切都适用,例如所有三个类的所有 get 和 set 函数,但这一段代码不起作用,我什至没有收到错误,程序不会运行超过某个点。我做错了什么?

【问题讨论】:

  • 不确定这是否是您要查找的问题,但是您首先将客户添加到向量中,然后如果在向量中找到它,则会引发运行时错误,这看起来有点奇怪。这不应该造成问题的唯一原因是,您在创建新客户时似乎忽略了customerID(但改用0),但随后您试图根据该ID找到客户
  • 也不清楚这行Customer addCustomer(int customerID, string customerName);应该在该方法中做什么
  • 通过阅读此代码,我觉得您可能需要read a book 而不是反复试验
  • 如果客户已添加,我不想将客户添加到客户列表中。这就是 for 循环的原因。
  • 我尝试使用从 customer.cpp 中获取的客户定义添加新客户,并将名称替换为 addCustomer 定义中给出的 customerName,然后将 customerID 替换为 addCustomer 定义中给出的客户 ID,然后我将信用默认为false,但它一直说信用未定义,尽管它在customer.h和customer.cpp中定义,我在store.cpp中包含了customer.h

标签: c++ class header


【解决方案1】:

我不明白那个函数的逻辑。如果您想检查客户是否已经在向量中,那么您应该在之前将其添加到向量中,而不是之后。您的代码中有很多我不理解的内容,我想知道为什么您没有得到大量编译器错误列表,但是该方法可能看起来像这样:

void Store::addCustomer(int customerID, string customerName){
    for (int i = 0; i < customers.size(); ++i) {
        if (customers.at(i).getID() == customerID){
            return; // why runtime error? if the customer is there already 
                    // then just dont add it....
        }
    }
    customers.push_back(Customer(customerName,customerID,false));
}

请注意,我假设您将向量从持有指针更改为持有对象(即std::vector&lt;Customer&gt;)。将指针存储在向量中几乎没有意义。 我也不会在这里使用运行时异常。运行时异常应该针对不应该发生的事情。

如果您在此之前已经确定要添加的客户是新客户,那么运行时例外将是有意义的。然后运行时异常会告诉您代码存在问题,以确保它是新客户。但是,我想这个函数实际上是您进行检查的地方。因此,这不是一个例外,而是在正常程序执行期间可能发生的事情。如果调用代码需要知道是否添加了客户,您可以让该方法返回一个bool,例如。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多