-1

これが私のメインです:

int main() {
  Inventory Master;
  bool flag;
  Customer Bob("Bob", "CreditCard.txt");
  Customer Joe("Joe", "CreditCard.txt" );



  Master.firststock( "inventory.txt" );
  vector<Food> temp = Master._Inv;
  cout <<"Hi, What would you like to buy today?" << endl;
  for(unsigned int i=0; i<temp.size(); i++ ) {
    cout << temp[i].name << " " << temp[i].quant << " " << temp[i].price << endl;
  }

  cout <<"\n";
  Food Apple("Apples", .99, 10);
  Food Orange("Oranges", .99, 10);
  Food Chip("Chips", 3.00, 10);

  cout <<"\nHi Bob" << endl;
  flag = Bob.addCart(Apple, 7, &Master);
  cout <<"Bob's total purchases are Currently: \n";
  Bob.report();
  flag = Bob.addCart(Orange, 2, &Master);
  flag = Bob.addCart(Chip, 2, &Master);
  Bob.report();
  flag = Bob.removeCart();
   Bob.report();
  cout <<"Bob, ";
  flag = Bob.checkout(&Master);

これは、ベクター_Cartから食べ物を削除するために実装した次のとおりです。

bool Customer::removeCart() {
  bool flag;
  int q = 0;
  unsigned int i=0;
  string remove;

  cout << "\nWhat would you like to remove and how much would you like to remove?" << endl;
  cin >> remove >> q;
 for (i =0; i < _Cart.size(); i++) {
  if(remove == _Cart[i].name) {
      if (q >= 0) {
    _Cart[i].quant -= q;
    //inv->_Inv[i].quant += q;
    cout <<"\nYou removed " << q << " " << remove <<" In your cart\n" << endl;
    return true;
      }
      if  (q < 0) {
          cout << "Invalid number of " << remove << " being removed.\n" << endl;
          return true;
      }
  }
  else {      
  try {
    throw remove;
}

  catch (string param) {
    cout << "\n" << remove << " doesn't exist in your cart\n" << endl;
        }

        return true;
    }
 }

関数removeCartを含む私のヘッダー:

class Customer {
  public:

   Customer(string n, string fileName);
    ~Customer() { _Cart.clear(); };
    bool addCart(Food f, int q, Inventory* inv);
    bool removeCart();
    void report(); 
    bool checkout(Inventory* inv); 
  protected:
    string remove;
    string name;
    int q;
    int card;
    double balance;
    CreditCard _CC(int card,double balance);
    vector<Food> _Cart;
};

なんらかの理由でremoveCartを呼び出すと、「Apples」と入力しても機能しますが、Appleという食品オブジェクトを作成したので、「Apple」ではなく「Apples」と入力すると削除される理由がわかりません。また、「オレンジ」または「チップ」を試してみると、例外が表示されますが、メインでわかるように、ボブのカートにチップとオレンジを追加しました。「オレンジ」と「チップス」を試したことがありますが、それでも動作せずに例外がスローされます。私は助けに感謝することができました。

4

2 に答える 2

0

for / if/else構造が壊れています。カートの最初の要素が一致しない場合は、例外をスローし、すぐにキャッチします。次のようなものを試してください。

 for (i =0; i < _Cart.size(); i++)
 {
    if(remove == _Cart[i].name)
    {
        if (q >= 0)
        {
           _Cart[i].quant -= q;
           //inv->_Inv[i].quant += q;
           cout <<"\nYou removed " << q << " " << remove <<" In your cart\n" << endl;
        }
        else
           cout << "Invalid number of " << remove << " being removed.\n" << endl;
        return true;
    }
 }
 cout << "\n" << remove << " doesn't exist in your cart\n" << endl;
 return true;
于 2012-08-07T06:11:52.310 に答える
0

宿題ですか?:)

まず、「Apple」は作成した変数の名前ですが、Foodのコンストラクターに「Apples」を渡しているので、この値は比較に使用される「name」メンバーに割り当てられていると思います。

次に、Davidが気付いたように、カートの最初の要素を削除しようとした場合にのみ、ループが機能します。あなたの場合、最初の要素の名前は「Apples」なので、「Apples」と入力すると機能します。

于 2012-08-07T06:19:19.957 に答える