Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.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++ 函数参数有什么问题? #包括 使用名称空间std; 模板 空背包(型号*v,型号*w,型号c,型号n,型号**m) { int i,j; int jMax=max(w[n]-1,c); 对于(j=0;j_C++ - Fatal编程技术网

C++ 函数参数有什么问题? #包括 使用名称空间std; 模板 空背包(型号*v,型号*w,型号c,型号n,型号**m) { int i,j; int jMax=max(w[n]-1,c); 对于(j=0;j

C++ 函数参数有什么问题? #包括 使用名称空间std; 模板 空背包(型号*v,型号*w,型号c,型号n,型号**m) { int i,j; int jMax=max(w[n]-1,c); 对于(j=0;j,c++,C++,这不是有效的转换: #include <iostream> using namespace std; template<class Type> void Knapsack(Type *v,int *w,int c,int n,Type **m) { int i,j; int jMax=max(w[n]-1,c); for(j=0;j<=jMax;j++) m[n][j]=0; for(j=w[n];j<=c;j++) m[n

这不是有效的转换:

#include <iostream>
using namespace std;

template<class Type>
void Knapsack(Type *v,int *w,int c,int n,Type **m)
{
 int i,j;
    int jMax=max(w[n]-1,c);
    for(j=0;j<=jMax;j++)
    m[n][j]=0;
for(j=w[n];j<=c;j++)
    m[n][j]=v[n];
for(i=n-1;i>1;i--)
{
    for(j=0;j<=w[i]-1;j++)
        m[i][j]=m[i+1][j];
    for(j=w[i];j<=c;j++)
    {
        m[i][j]=max(m[i+1][j],m[i+1][j-w[i]]+v[i]);
    }
}
m[1][c]=m[2][c];
if(c>=w[1])
    m[1][c]=max(m[2][c],m[1][c-w[1]]+v[1]);

}

template <class Type>
void TrackBack(Type **m,int *w,int c,int n,int *x){
for(int i=1;i<=n;i++)
{
    if(m[i][c]==m[i+1][c])
        x[i]=0;
    else
        x[i]=1;
}
}

int main()
{
int m[101][101]={0};
int x[101];
int n=5;
int c=10;
int w[5]={2,2,6,5,4};
int v[5]={6,3,5,4,6};

Knapsack(v,w,c,n,m);


return 0;
}

m
可以衰减为类型“指向101个整数数组的指针”,但不能再进一步。

至少是参数类型

int m[101][101]
...
Knapsack(v,w,c,n,m);
              // ^-- expects a Type **m
不等于
T**
,其中
T
int

当此数组作为参数按值传递时,它将隐式转换为指向其第一个元素的指针,并具有类型
int(*)[101]

考虑到在任何情况下该函数都是无效的。例如,第二个参数w的参数有5个元素

int m[101][101]={0};
函数调用中它的有效索引范围为
[0,4]
n
等于5

int jMax=max(w[n]-1,c);
所以这个声明

int w[5]={2,2,6,5,4};
具有未定义的行为,因为您使用的不允许索引等于5

int jMax=max(w[n]-1,c);
模板
空背包(型号*v,型号*w,型号c,型号n,型号**m)
{
int i,j;
int jMax=max(w[n]-1,c);
//...

您对函数的定义有点错误

template<class Type>
void Knapsack(Type *v,int *w,int c,int n,Type **m)
{
 int i,j;
    int jMax=max(w[n]-1,c);
//...
模板
空背包(型号*v,型号*w,型号c,型号n,型号m[][101])
模板<类类型>
void TrackBack(类型m[][101],int*w,int-c,int-n,int*x)

它没有味道
C
。你在做什么?请正确格式化你的代码-没有人想浪费时间去理解格式不好的代码。Paul R的评论中缺少的单词是…code某种类型的数组与指向该类型的指针的指针不同。请参阅e.g了解原因。谢谢谢谢你的回答。我不能放弃你的投票权,因为我没有足够的声誉。。。。。。