Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 结构数组:没有匹配的函数可调用并接受用户输入_C++ - Fatal编程技术网

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可以选择哪一个似乎更有用。不过,这也是一个很好的答案。其中包括一个要点。