代码无法编译。我不明白错误是什么,请帮忙)
#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提供
答案 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;
为了定义默认构造函数。