C ++代码无法编译

时间:2017-04-06 23:11:29

标签: c++

代码无法编译。我不明白错误是什么,请帮忙)

#include <iostream>
#include <fstream>

class Record{
    std::string product_name;
    std::string product_category;
    int price;
    int amount;
public:
Record(std::string newName, std::string newCategory, int newPrice, int newAmount){
    product_name=newName;
    product_category=newCategory;
    price=newPrice;
    amount=newAmount;
}

    std::string getName(){
        return product_name;
    }
    std::string getCategory(){
        return product_category;
    }
    int getPrice(){
        return price;
    }
    int getAmount(){
        return amount;
    }
    void setName(std::string newName){
        product_name=newName;
    }
    void setCategory(std::string newCategory){
        product_category=newCategory;
    }
    void setPrice(int newPrice){
        price=newPrice;
    }
    void setAmount(int newAmount){
        amount=newAmount;
    }
};

int main(){
    Record r1;
    r1.setName("beer");
    r1.setCategory("alcohol");
    r1.setPrice(12);
    r1.setAmount(32);
    Record r2("carrot", "vegetables", 123, 1932);
    std::cout<<r1.getName()<<" "<<r1.getCategory()<<" "<<r1.getPrice()<<" "<<r1.getAmount()<< std::endl;
    std::cout<<r2.getName()<<" "<<r2.getCategory()<<" "<<r2.getPrice()<<" "<<r2.getAmount()<< std::endl;
    Record r3[2];
    std::string a;
    float b;
    unsigned int c;
    for(unsigned int i=0; i<2; ++i){
        std::cout<<"input name: ";
        std::cin>>a;
        r3[i].setName(a);
        std::cout<<"input category: ";
        std::cin>>a;
        r3[i].setCategory(a);
        std::cout<<"input price: ";
        std::cin>>b;
        r3[i].setPrice(b);
        std::cout<<"input amount: ";
        std::cin>>c;
        r3[i].setAmount(c);
    }
    for(unsigned int i=0; i<2; ++i){
        std::cout<<r3[i].getName()<<" "<<r3[i].getCategory()<<" "<<r3[i].getPrice()<<" "<<r3[i].getAmount()<< std::endl;

    }

    return 0;

}
  

错误文字:       g ++ -Wall -c&#34; main.cpp&#34; (/ media / ad / 4GB-NTFS / prog / laba2)       main.cpp:在函数'int main()'中:       main.cpp:46:12:错误:没有匹配函数来调用'Record :: Record()'            记录r1;                   ^       main.cpp:12:1:注意:候选:Record :: Record(std :: __ cxx11 :: string,std :: __ cxx11 :: string,int,int)        Record(std :: string newName,std :: string newCategory,int newPrice,int newAmount){        ^       main.cpp:12:1:注意:候选人需要4个参数,0提供       main.cpp:6:7:注意:候选人:Record :: Record(const Record&amp;)        class Record {              ^       main.cpp:6:7:注意:候选人需要1个参数,0提供       main.cpp:54:16:错误:没有匹配函数来调用'Record :: Record()'            记录r3 [2];                       ^       main.cpp:12:1:注意:候选:Record :: Record(std :: __ cxx11 :: string,std :: __ cxx11 :: string,int,int)        Record(std :: string newName,std :: string newCategory,int newPrice,int newAmount){        ^       main.cpp:12:1:注意:候选人需要4个参数,0提供       main.cpp:6:7:注意:候选人:Record :: Record(const Record&amp;)        class Record {              ^       main.cpp:6:7:注意:候选人需要1个参数,0提供

4 个答案:

答案 0 :(得分:2)

您的班级没有默认构造函数。所以当你说:

   Record r1;

编译器不知道如何创建r1对象。您需要在创建r时提供所有参数:

  Record r1( "foo", "bar", 1, 2 );

或者更好地完全重新考虑你的程序设计。

答案 1 :(得分:0)

您已经覆盖了类的构造函数,因此没有一个接受零参数,因为这需要:

Record r1;

定义默认构造函数:

Record() {}

答案 2 :(得分:0)

你必须定义一个没有参数的构造函数。

Record r1尝试调用Record(),但找不到它。只需在您的类中添加额外的构造函数即可。它可以是空的。这也将解决Record r3[2]的相同问题。



附: (与问题无关,但有帮助)

查看您的代码,我建议您查看member initializer lists以实现您的构造函数。为什么?请参阅here

答案 3 :(得分:-1)

  

main.cpp:46:12:错误:没有匹配函数来调用'Record :: Record()'

就是说,此时:

Record r1;

您正尝试使用默认构造函数(r1)实例化对象Record::Record。实际上你没有提供任何参数。

此外,编译器继续:

  

注意:候选人需要4个参数,0提供

类接口之后,实例化Record对象的唯一方法是使用唯一提供的构造函数,即:

Record(std::string, std::string, int, int);

如果要允许使用默认构造函数实例化Record对象,则必须提供它。

C ++ 11允许你写:

Record() = default;

为了定义默认构造函数。