0

我的代码有一些问题。具体来说:

bool Customer::checkout(Inventory* inv) {
  double total = 0;
  for( unsigned int i=0; i < _Cart.size(); i++ ) {
      total += _Cart[i].price; // price * quantity??
  }
  if( Customer.balance < total ) {
      return false;
  }
  else {
      unsigned int i =0;
    for ( i =0; i < inv->_Inv.size(); i++) {//go through inventory, check names, if there is a match, 
          if (inv->_Inv[i].name == _Cart[i].name) {     //decrement the quantity accordingly, if there is no match, 
              inv->_Inv[i].quant -= _Cart[i].quant;
              break;
        }
    }
    if( i == inv->_Inv.size() ) {  //you need to push the new food into the inventory vector
        inv->_Inv.push_back(_Cart[i]);
        return true;
    }
}

在我的头文件中,我有:

class Customer {
  public:
    Customer( string n, int c, double b );
    bool addCart( Food f );
    bool removeCart( Food f );
    void report(); //to do
    bool checkout(Inventory* inv); //to do
  protected:
    string name;
    int card;
    double balance;
    //CreditCard _CC;
    vector<Food> _Cart;
};

class Inventory {
  public: 
    vector<Food> _Inv;
    vector<Food> _Purchases;
    int interval;
    void firststock( string fileName );
    void showFirststock( string fileName);
    void restock( string file, int inter );
    void summary(); //to do

我得到的错误如下:

  1. 错误 C2061:语法错误:标识符 'Inventory' 错误 C2061:(关于 bool checkout(Inventory* inv);)
  2. 语法错误:标识符 'Inventory' bool
  3. Customer::checkout(Inventory )' : 在 'Customer' 中找不到重载的成员函数,请参阅 'Customer' 的声明 .... (关于 bool Customer::checkout(Inventory inv))

请帮忙

4

1 回答 1

2

您需要Inventory在定义之前进行前向声明Customer

class Inventory;
class Customer {
    //....
};

class Inventory {
    //....
};

关于代码的一些注释:

  • 通过const引用传递复杂的数据类型 - 例如 -bool addCart( const Food& f );而不是bool addCart( Food f );

  • 您对 unqualified 的使用string表明您using namespace std;在标题中的某个位置。那不行,至少在标题中,您应该没有using指令,而是完全限定类型 - std::string,它也应该通过引用传递

于 2012-07-14T23:29:47.067 回答