class Commodity {// 商品类
public:
Commodity(string names,double prices,double nums){
name = names;
price = prices;
num = nums;
}
void printInfo(){
cout<<"商品名称"<<name<<endl;
cout<<"标牌价格"<<price<<endl;
cout<<"购买数量"<<num<<endl;
} // 输出该商品的信息:名称、标牌价格、购买数量
double getNum(){return num;}
double getPrice(){return price;}
private:
string name;
double price;
double num;
};
class Cart { // 购物车模板类
public:
Cart(){
i=0;
money=0;
};
void addItem(Commodity thing){
//iterms=new Commodity;
iterms[i]=thing;
i++;
}// 添加一定数量的商品到购物车
double checkout(){
for(int j=0;j<i;j++){
money=money+iterms[j].getNum()*iterms[j].getPrice();
}
return money;
} // 对购物车中的商品进行结算
void printInvoice(){
for(int j=0;i<i;j++){
iterms[j].printInfo();
}
} // 将商品信息输出到显示器
~Cart();
private:
Commodity iterms[20];
int i;
double money;
};
int main() {
Cart myCart;
//double money_all;
Commodity tShirt("Tshirt", 79, 2);// 创建服装对象,名称、价格、数量
Commodity suit("suit", 1099, 1); // 套装
Commodity hat("hat", 129, 3); // 帽子
Commodity tv("tv set", 4899, 1); // 创建家电对象,名称、价格、数量
Commodity ac("air condition", 5280, 1);// 空调 //将商品添加到购物车
myCart.addItem(tShirt);
myCart.addItem(suit);
myCart.addItem(hat);
myCart.addItem(tv);
myCart.addItem(ac);
cout<<"一共的金额是"<<myCart.checkout()<<endl; // 购物车商品结算,显示顾客需要支付的总金额
myCart.printInvoice(); // 将购物清单输出到显示器上
return 0;
}
为什么一直报错no matching function for call to 'Commondity::Commondirty'
....可能还有其他的报错,但是就是这个报错一直想不明白为什么,求大神指导
给你改了一个可以运行成功的版本
#include<iostream> using namespace std; class Commodity {// 商品类 public: Commodity(string names,double prices,double nums){ name = names; price = prices; num = nums; } Commodity(){} void printInfo(){ cout<<"商品名称"<<name<<endl; cout<<"标牌价格"<<price<<endl; cout<<"购买数量"<<num<<endl; } // 输出该商品的信息:名称、标牌价格、购买数量 double getNum(){return num;} double getPrice(){return price;} private: string name; double price; double num; }; class Cart { // 购物车模板类 public: Cart(){ i=0; money=0; for(int i=0;i<20;i++) iterms[i]=Commodity(); }; void addItem(Commodity thing){ //iterms=new Commodity; iterms[i]=thing; i++; }// 添加一定数量的商品到购物车 double checkout(){ for(int j=0;j<i;j++){ money=money+iterms[j].getNum()*iterms[j].getPrice(); } return money; } // 对购物车中的商品进行结算 void printInvoice(){ for(int j=0;i<i;j++){ iterms[j].printInfo(); } } // 将商品信息输出到显示器 private: Commodity iterms[20]; int i; double money; }; int main() { Cart myCart; //double money_all; Commodity tShirt("Tshirt", 79, 2);// 创建服装对象,名称、价格、数量 Commodity suit("suit", 1099, 1); // 套装 Commodity hat("hat", 129, 3); // 帽子 Commodity tv("tv set", 4899, 1); // 创建家电对象,名称、价格、数量 Commodity ac("air condition", 5280, 1);// 空调 //将商品添加到购物车 myCart.addItem(tShirt); myCart.addItem(suit); myCart.addItem(hat); myCart.addItem(tv); myCart.addItem(ac); cout<<"一共的金额是"<<myCart.checkout()<<endl; // 购物车商品结算,显示顾客需要支付的总金额 myCart.printInvoice(); // 将购物清单输出到显示器上 return 0; }
谢谢,已解决。为以后的有相同的问题的朋友们总结一下吧
主要的原因就是在第一个commodiity类的构造函数中,缺少了一个没带参数的构造函数。
这也就是报错中的为什么没有找到Commodity:Commodity()的原因。
也就是回答中的加上Commodity(){}就解决了
@绝地绅士: 好的!很棒棒!
你定义的构造函数(string names,double prices,double nums), 类型是double的
Commodity tv("tv set", 4899, 1)用的时候使用的是整数,没法自动转型吧
强制下就行