将数组值保存为double变量

时间:2009-02-23 12:03:31

标签: c++ arrays operators

向大家致以问候。编译包含以下函数的脚本时遇到问题。发生三个错误,全部在我设置距离+ =距离[] []:

的同一行

错误C2108:下标不是整数类型 错误C2108:下标不是整数类型 错误C2297:'+ =':非法,右操作数的类型为'double(*)[15]'

援助会非常受欢迎。

double S_initial;

double distances [15][15]; 
double order [15];
void Initialize() 
{
    double x, y ,z;

    double distance = 0;

    for (int i = 0; i <= 14; i++)
    {
        x =  order [i];
        y =  order [i + 1];

        distance += distances [x][y];
    }

    S_initial = distance;
}

4 个答案:

答案 0 :(得分:3)

嗯,数组下标xy不是int的整数类型,而是double类型:

double x, y, z;
...
distance += distances[x][y];

像数组的1.46534th元素之类的东西没有意义,所以编译器会抱怨。

答案 1 :(得分:2)

x和y不是整数...你需要将整数作为数组下标传递。

答案 2 :(得分:1)

停止使用double并改用int。

或者如果你必须在order数组中使用double,你需要决定如何舍入可以找到int的任何非整数值。 Math.Floor,Math.Ceiling等。

答案 3 :(得分:0)

您不能使用浮点数来索引数组。使用int或甚至更好的size_t。

 for (int i = 0; i <= 14; i++)
{
    x =  order [i];
    y =  order [i + 1]; /* when i = 14, you invoke UB */

    distance += distances [x][y];
}

到第二部分:

double order [15];

未初始化,因此在使用时会调用UB。