添加指针会导致错误,因为找不到类错误重载的成员函数

时间:2012-07-14 23:25:57

标签: c++ visual-c++

我的代码遇到了一些问题。具体是:

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:语法错误:标识符'库存'错误C2061 :(关于bool checkout(Inventory * inv);)
  2. 语法错误:标识符'Inventory'bool
  3. Customer :: checkout(Inventory )':不重载成员函数 在'客户'中找到'客户'的声明....(关于bool Customer :: checkout(Inventory inv))
  4. 请帮忙

1 个答案:

答案 0 :(得分:2)

Inventory的定义之前,您需要向Customer提出前瞻声明。

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

class Inventory {
    //....
};

关于代码的一些注释:

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

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