-5

我有以下功能,我不明白它有什么问题。我是初学者,所以请尽可能简单。

我在第三个单循环中收到错误,我尝试将一些值分配给数组,大小匹配,但我不知道如何修复它。

int Planet::locateClosestDanger(int x,int y){
int n=0;
for (int i=0;i<getZones()->size();i++){ // evaluate the size of the array
    if (getZones()->at(i)->getAccessDanger()>0.5){
        n++;
    }
}
int m=0;
int dangerAtX[n];
int dangerAtY[n];
for (int i=0;i<getZones()->size();i++){ // assign values to arrays for the locations of the objects
    if (getZones()->at(i)->getAccessDanger()>=0.6){
        dangerAtX[m]=getZones()->at(i)->getPosZoneX();
        dangerAtY[m]=getZones()->at(i)->getPosZoneY();
        m++;
    }
}
float r[n];
for (int i=0;i<n;i  // compute all euclidean distances and assign values to array
    r[i]=BOO::eudi(x,y,dangerAtX,dangerAtY);    // here I get the error
}
int temp;
int q=r;
for (int i=0;i<n;i++){  // Bubblesort, smallest euclidean distance goes to r[0]
    for (int j=0;j<n-1;j++){
        if (r[j]>r[j+1]){
            temp=r[j];
            r[j]=r[j+1];
            r[j+1]=temp;
        }
    }
}
int index;
for (int i=0;i<n;i++){  // find index on array, coordinates of r[0]
    if (q[i]=r[0]){
        index=i;
    }
}
return dangerAtX[index], dangerAtY[index]; // return the coordinates

}

namespace BOO{
float eudi(int x,int y,int X,int Y){
    return sqrt((float)pow(abs(x-X),2)+(float)pow(abs(y-Y),2));
}

}

4

3 回答 3

3

这个:

for (int i=0;i<n;i  // compute all euclidean distances and assign values to array
    r[i]=BOO::eudi(x,y,dangerAtX,dangerAtY);    // here I get the error
}

不见了) {

return dangerAtX[index], dangerAtY[index]; // return the coordinates

不会返回x,y坐标。您的函数的返回类型是,在您的情况下,运算符int的值,将计算为列表中的最后一个表达式dangerAtY[index]。用于std::pair返回一对值。

根据您的评论,签名BOO::eudieudi(int x,int y,int X,int Y)当您将dangerAtXanddangerAtY数组作为第三个和第四个参数传递时。dangerAtX并且dangerAtY是 if 类型int *while 方法期望int。你可能打算打电话给BOO::eudi(x,y,dangerAtX[i],dangerAtY[i]).

于 2013-11-01T09:30:37.267 回答
1

for (int i=0;i<n;i  // ...

缺少右括号和左括号。

随着声明

float eudi(int x,int y,int X,int Y)

您说该函数eudi接受四个int参数,但是当您调用该函数时,您将两个数组(衰减为指针)作为最后两个参数传递。

你可能打算做

BOO::eudi(x,y,dangerAtX[n],dangerAtY[n]);

注意数组索引的使用。

于 2013-11-01T09:25:11.647 回答
0

您没有向我们展示 eudi 方法的声明,但我敢打赌这是错误的。

您的数组 dangerAtX 是这样定义的:

int dangerAtX[n];

它是一个ints 数组,因此标识符dangerAtX的类型为int*。eudi 的第三个和第四个参数有哪些类型?

于 2013-11-01T09:32:20.313 回答