错误:从'int *'到'int'的无效转换

时间:2013-11-01 09:23:13

标签: c++

我有以下功能,我无法理解它有什么问题。我是初学者,所以请尽量简单。

我在第3个单循环中得到错误,我尝试为数组分配一些值,大小匹配,我不知道如何解决它。

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

}

3 个答案:

答案 0 :(得分: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)数组作为第三和第四参数传递时,dangerAtX的签名为dangerAtYdangerAtXdangerAtY的类型为int *,而方法需要int。您可能打算致电BOO::eudi(x,y,dangerAtX[i],dangerAtY[i])

答案 1 :(得分: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]);

注意使用数组的索引。

答案 2 :(得分:0)

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

您的数组dangerousAtX因此被定义:

int dangerAtX[n];

这是int s的数组,因此标识符dangerAtX的类型为int*。你对eudi的第三和第四个参数有什么类型?