首页 新闻 会员 周边

C++类中的对象数组报错

0
[已解决问题] 解决于 2018-04-10 13:43

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'

....可能还有其他的报错,但是就是这个报错一直想不明白为什么,求大神指导

绝地绅士的主页 绝地绅士 | 初学一级 | 园豆:163
提问于:2018-04-09 23:19
< >
分享
最佳答案
1

给你改了一个可以运行成功的版本

#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;
}
奖励园豆:5
Shendu.CC | 老鸟四级 |园豆:2138 | 2018-04-10 10:39

谢谢,已解决。为以后的有相同的问题的朋友们总结一下吧

主要的原因就是在第一个commodiity类的构造函数中,缺少了一个没带参数的构造函数。

这也就是报错中的为什么没有找到Commodity:Commodity()的原因。

也就是回答中的加上Commodity(){}就解决了

绝地绅士 | 园豆:163 (初学一级) | 2018-04-10 13:43

@绝地绅士: 好的!很棒棒!

Shendu.CC | 园豆:2138 (老鸟四级) | 2018-04-10 14:27
其他回答(1)
0

你定义的构造函数(string names,double prices,double nums), 类型是double的

Commodity tv("tv set", 4899, 1)用的时候使用的是整数,没法自动转型吧

强制下就行

2012 | 园豆:21230 (高人七级) | 2018-04-10 08:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册