当前位置: 首页 > 知识库问答 >
问题:

C代码不编译

夏元明
2023-03-14

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

#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“main.cpp”(/media/ad/4GB-NTFS/prog/laba2)main。cpp:In函数“int main()”:main。cpp:46:12:错误:调用“Record::Record()”记录r1;^主要的cpp:12:1:注意:候选者:Record::Record(std::\u cxx11::string,std::\u 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

共有3个答案

柴浩大
2023-03-14

主要的cpp:46:12:错误:调用“Record::Record()”时没有匹配的函数

也就是说,在这一点上:

Record r1;

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

此外,编译器继续:

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

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

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

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

C 11允许您编写:

Record() = default;

以定义默认构造函数。

暴夕
2023-03-14

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

Record r1;

定义默认构造函数:

Record() {}
阎卓
2023-03-14

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

   Record r1;

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

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

或者最好彻底重新考虑程序的设计。

 类似资料:
  • 我编译了以下C代码: 使用命令 .下面是输出中的 Bar 函数: 我有几个关于这个汇编代码的问题: > 如果函数体中既没有使用也没有使用rsp,那么"",""和""的目的是什么? 为什么和自动包含C函数的参数(分别为和)而不从堆栈中读取它们? 我尝试将Foo的大小增加到88字节(11s),指令变成了。将我的结构设计为“圆形”大小以避免乘法指令(以优化数组访问)是否有意义?指令被替换为:

  • 本文向大家介绍C#计算器编写代码,包括了C#计算器编写代码的使用技巧和注意事项,需要的朋友参考一下 利用C#编写一个计算器。如下图,能够完成基本的四则运算。 当然这个程序甚至还不上Windows附件那个自带的多功能计算器。  不过这个程序的逻辑还是非常值得思考的,首先你要考虑好用户按+ - * / =等运算符号、数字键之后计算器的状态记录问题。  然后要防止多次按某一个键的问题。比如小数点.就不应

  • 问题内容: 当我尝试通过发出命令“ g ++ qr.cpp -o qr”来编译此文件时,系统挂起。我在其他任何地方都没有看到这种错误。 我的编译器版本信息如下。 问题答案: 你知道这些有多大吗? 每个至少1GB !!!您将要动态分配它们…

  • 我正在尝试编译这里提到的桥接模式C示例代码 但是,当我使用g-o桥时,我会遇到编译错误。C 计划: 错误: ]#g-o桥桥。C桥。C: 在成员函数“virtual void TimeImp::tell()”中:Bridge。C: 14:错误:“运算符”不匹配 这是错误的一部分,它以相同的模式扩展。 我复制粘贴了相同的代码,分析了错误行,但无法得到它。 有人能告诉我我哪里错了吗?

  • 我经常遇到这种情况。乍一看,我认为,“这是糟糕的编码;我正在执行一个方法两次,必然会得到相同的结果。”但想到这里,我不得不怀疑编译器是否像我一样聪明,并能得出相同的结论。 编译器的行为是否取决于 方法的内容?假设它看起来像这样(有点类似于我现在的真实代码): 除非对这些对象来自的任何存储进行处理不当的异步更改,否则如果连续运行两次,肯定会返回相同的内容。但是,如果它看起来像这样(为了论证而无意义的