Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 添加指针会导致类出错,找不到错误重载的成员函数_C++_Visual C++ - Fatal编程技术网

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

C++ 添加指针会导致类出错,找不到错误重载的成员函数,c++,visual-c++,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; }

我的代码有一些问题。具体而言:

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;
    }
}
bool客户::结帐(库存*inv){
双倍合计=0;
对于(无符号整数i=0;i<_Cart.size();i++){
总计+=\购物车[i]。价格;//价格*数量??
}
if(客户余额<总计){
返回false;
}
否则{
无符号整数i=0;
对于(i=0;i_inv.size();i++){//检查库存,检查名称,如果有匹配项,
如果(inv->_inv[i].name==_Cart[i].name){//相应地减少数量,如果没有匹配项,
库存->库存[i]。数量-=[库存车[i]。数量;
打破
}
}
如果(i==inv->_inv.size()){//您需要将新食品推入库存向量
库存->库存推回(_Cart[i]);
返回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
class客户{
公众:
客户(字符串n、整数c、双b);
布尔阿德卡特(食品f);
bool removeCart(食品f);
void report();//要执行的操作
bool结帐(库存*库存);//要做
受保护的:
字符串名;
int卡;
双平衡;
//信用卡;
向量车;
};
班级清单{
公众:
向量_Inv;
向量购买;
整数区间;
void firststock(字符串文件名);
void showFirststock(字符串文件名);
作废重新进货(字符串文件,int inter);
void summary();//要执行的操作
我得到的错误如下:

  • 错误C2061:语法错误:标识符“Inventory”错误C2061:(关于bool签出(Inventory*inv);)
  • 语法错误:标识符“Inventory”bool
  • 客户::签出(库存)“:未重载成员函数 在“客户”中找到,请参见“客户”声明…(关于bool客户::结帐(库存库存库存))

  • 请帮助在定义
    客户
    之前,您需要向
    库存
    转发声明

    class Inventory;
    class Customer {
        //....
    };
    
    class Inventory {
        //....
    };
    
    关于代码的一些注释:

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

    • 您使用非限定的
      字符串
      表明您在标题中的某个位置使用了
      名称空间std;
      。这不好,至少在标题中,您不应该使用
      指令,而应该完全限定类型-
      std::string
      ,它也应该通过引用传递


    好的,非常感谢。我还没有尝试上面的内容,因为我没有时间,但是你能澄清一下如何将std::string作为参考传递吗?或者给我一个我提供的代码的例子吗?我的意思是,显然有一些代码我没有提供,所以如果我没有提供正确的上下文或代码,那么就可以了。谢谢你的帮助谢谢。如果你需要我再补充一点,也许我可以。@AjMunot我已经发布了建议和解决方案,剩下的你可以自己使用谷歌和研究。如果有什么不清楚的,你可以回来问。谢谢你的帮助。如果我还有问题,我一定会问