繁体   English   中英

将二维数组传递给函数会产生奇怪的错误

[英]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中传递此参数。

有人可以解释一下我如何使它起作用吗?

谢谢

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;
     }

可以通过将nearest_neighbor参数的nearest_neighbormain distance更改为float** 但是, distance的初始化必须以不同的方式进行,并且实际尺寸应作为参数传递给nearest_neighbor

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM