将二维数组传递给函数会产生奇怪的错误
Passing 2-D array to function gives strange error
您好,我正在尝试创建一个函数,但出现错误
[Error] cannot convert 'float (*)[(((sizetype)(((ssizetype)n) + -1)) + 1)]' to 'float (*)[30]' for argument '1' to 'float vecino_mas_cercano(float (*)[30])'
我的代码是:
#include <iostream>
#include<stdio.h>
#include <fstream>
#include<stdlib.h>
using namespace std;
int n1=30;
float nearest_neighbor(float distances[30][30])
{ float min=distances[0][1];
int candidates[n1];
int city=0;
for (int i=0;i<n1;i++)
{ candidates[i]=i;
}
for (int i=0;i<n1;i++)
{ for (int &j:candidates)
{ if (j!=0)
if (distances[city][j]<min);
{ min=distances[i][j];
candidates[i]=0;
city=j;
}
}
}
return min;
}
int main()
{
//Declaración de variables
int n=30; //número de nodos o cityes
FILE *d;
float distance[n][n];
d =fopen("Oli30.csv","r");//r abrir el archivo que contiene las distances para leerlo
for(int i=0 ;i<n; i++) //en la matriz distance se guardan los valores de las distances
{ for(int j=0; j<n; j++)
{ fscanf(d,"%f",&distance[i][j]);}
}
float tau_initial;
tau_initial=nearest_neighbor(distance);
cout << "The result is " << tau_initial;
return 0;
}
我想问题是因为 distance 被设置为一个指针,我不知道如何在函数中传递这个参数 nearest_neighbor。
有人可以向我解释一下如何让它工作吗?
谢谢
将main
中nearest_neighbor
和distance
的参数类型改为float**
即可解决问题。但是,distance
的初始化必须以不同的方式进行,实际尺寸应作为参数传递给 nearest_neighbor
。
int n = 30;
必须改为int const n = 30;
.
如您现在所见,float distance[n][n]
是非法的。标准 C++ 中的数组必须具有维度常量。
错误消息表明您的编译器正在为具有非常量维度的数组实现某种扩展(可能类似于 C VLA),然后它不知道如何将其与期望的函数匹配一个常量维度数组。
我相信你这里有一个无意的错误:
if (distances[city][j]<min); // The if block ends here.
{ min=distances[i][j];
candidates[i]=0;
city=j;
}
你的意思可能是:
if (distances[city][j]<min)
{
min=distances[i][j];
candidates[i]=0;
city=j;
}
您好,我正在尝试创建一个函数,但出现错误
[Error] cannot convert 'float (*)[(((sizetype)(((ssizetype)n) + -1)) + 1)]' to 'float (*)[30]' for argument '1' to 'float vecino_mas_cercano(float (*)[30])'
我的代码是:
#include <iostream>
#include<stdio.h>
#include <fstream>
#include<stdlib.h>
using namespace std;
int n1=30;
float nearest_neighbor(float distances[30][30])
{ float min=distances[0][1];
int candidates[n1];
int city=0;
for (int i=0;i<n1;i++)
{ candidates[i]=i;
}
for (int i=0;i<n1;i++)
{ for (int &j:candidates)
{ if (j!=0)
if (distances[city][j]<min);
{ min=distances[i][j];
candidates[i]=0;
city=j;
}
}
}
return min;
}
int main()
{
//Declaración de variables
int n=30; //número de nodos o cityes
FILE *d;
float distance[n][n];
d =fopen("Oli30.csv","r");//r abrir el archivo que contiene las distances para leerlo
for(int i=0 ;i<n; i++) //en la matriz distance se guardan los valores de las distances
{ for(int j=0; j<n; j++)
{ fscanf(d,"%f",&distance[i][j]);}
}
float tau_initial;
tau_initial=nearest_neighbor(distance);
cout << "The result is " << tau_initial;
return 0;
}
我想问题是因为 distance 被设置为一个指针,我不知道如何在函数中传递这个参数 nearest_neighbor。
有人可以向我解释一下如何让它工作吗?
谢谢
将main
中nearest_neighbor
和distance
的参数类型改为float**
即可解决问题。但是,distance
的初始化必须以不同的方式进行,实际尺寸应作为参数传递给 nearest_neighbor
。
int n = 30;
必须改为int const n = 30;
.
如您现在所见,float distance[n][n]
是非法的。标准 C++ 中的数组必须具有维度常量。
错误消息表明您的编译器正在为具有非常量维度的数组实现某种扩展(可能类似于 C VLA),然后它不知道如何将其与期望的函数匹配一个常量维度数组。
我相信你这里有一个无意的错误:
if (distances[city][j]<min); // The if block ends here.
{ min=distances[i][j];
candidates[i]=0;
city=j;
}
你的意思可能是:
if (distances[city][j]<min)
{
min=distances[i][j];
candidates[i]=0;
city=j;
}