C++ 结构数组:没有匹配的函数可调用并接受用户输入
我已经为背包问题编写了一个代码。当我硬编码输入时,代码工作得很好,但现在我想从结构数组中的用户那里获取输入,但它显示错误。我如何实现这一点? 原始代码:C++ 结构数组:没有匹配的函数可调用并接受用户输入,c++,C++,我已经为背包问题编写了一个代码。当我硬编码输入时,代码工作得很好,但现在我想从结构数组中的用户那里获取输入,但它显示错误。我如何实现这一点? 原始代码: #include<iostream> #include<algorithm> using namespace std; struct Item{ int value; int weight; Item(int value,int weight):value(value),weight(weight
#include<iostream>
#include<algorithm>
using namespace std;
struct Item{
int value;
int weight;
Item(int value,int weight):value(value),weight(weight){
}
};
bool cmp(struct Item a,struct Item b){
float r1=(float)a.value/a.weight;
float r2=(float)b.value/b.weight;
//cout<<r1<<" "<<r2<<endl;
return r1>r2;
}
void knapsack(int m,int n,struct Item arr[]){
sort(arr,arr+n,cmp);
/* for(int i=0;i<n;i++){ //new sorted array
cout<<arr[i].value<<" "<<arr[i].weight<<" ";
}*/
cout<<endl;
float result[n];
for(int i=0;i<n;i++){
result[i]=0.0;
}
int rem=m;
int j=0;
for(j=0;j<n;j++){
if(arr[j].weight>rem){
break;
}
else{
result[j]=1;
rem=rem-arr[j].weight;
}
}
if(j<n){
result[j]=(float)rem/arr[j].weight;
}
for(int k=0;k<n;k++){
cout<<result[k]<<" ";
}
}
int main(){
struct Item arr[]={{25,18},{24,15},{15,10}};
knapsack(20,3,arr);
return 0;
}
#包括
#包括
使用名称空间std;
结构项{
int值;
整数权重;
项目(整数值,整重量):值(值),重量(重量){
}
};
bool cmp(结构项目a、结构项目b){
浮点数r1=(浮点数)a.值/a.重量;
浮动r2=(浮动)b.值/b.重量;
//无法检查以下代码:
struct Item{
int value;
int weight;
Item(int value,int weight):value(value),weight(weight){
}
};
没有默认构造函数。因此以下行失败:
struct Item arr[10];
但下面这句话很管用:
struct Item arr[]={{25,18},{24,15},{15,10}};
解决方案[1]:提供默认构造函数或删除显式构造函数
struct Item arr[10];
[1] 代码中可能有更多的问题,但我研究了您在问题中指出的问题。您提供了参数化构造函数项(int值,int权重)
,因此编译器不会自行生成默认构造函数
您必须显式定义默认构造函数才能使下面的语句工作,因为它需要默认构造函数
struct Item arr[10];
但是下面的代码行使用了您提供的参数化构造函数
struct Item arr[]={{25,18},{24,15},{15,10}};
请发布整个错误消息。这样做有效,但为什么我需要提供默认构造函数?@MickeyMouse,当您执行struct Item arr[10];
,创建了一个包含10个Item元素的数组。对于每个元素,都必须调用默认构造函数,以便用正确的值初始化数组中的各个元素。这就是为什么编译器希望它有一个默认构造函数,但它找不到它。@MickeyMouse,当您自己为struct Item提供构造函数时代码>,您的类没有隐式,因此必须显式提供一个。我看不出这个答案与已发布的答案有什么不同。@KunalPuri值是编译器没有生成默认构造函数,因为已经有一个用户定义的构造函数。它应该是对已发布答案的注释,不是新答案。@KunalPuri我用Android手机回答,写了一段时间后,我注意到了你的答案。但由于这个答案信息更丰富,我保留了原样,以便OP可以选择哪一个似乎更有用。不过,这也是一个很好的答案。其中包括一个要点。