我上课时遇到了麻烦。所以我有三个不同的类:商店,客户和产品。在商店类中,我希望能够添加客户。问题是我需要添加客户的方式不遵循客户在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函数,但是这一段代码不能正常工作,我甚至没有得到错误,程序只是不会比某个点运行得更远。我做错了什么?
答案 0 :(得分:0)
我不理解该功能的逻辑。如果您想检查客户是否已经在向量中,那么您应该之前将其添加到向量中,而不是之后。您的代码中有很多我不理解的东西,我想知道为什么你没有得到一个巨大的编译器错误列表,但是这个方法看起来像这样:
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<Customer>
)。在向量中存储指针几乎没有意义。
此外,我不会在这里使用运行时异常。运行时异常应该适用于不应该发生的事情。
如果您之前已经确定要添加的客户是新客户,那么运行时激活是有意义的。然后运行时异常会告诉您代码存在一些问题,确保它是新客户。但是,我想这个函数实际上是你检查的地方。因此,它不是例外,而是在正常程序执行期间可能发生的事情。如果调用代码需要知道是否添加了客户,则可以使方法返回bool
为例。