0

大家好。编译包含以下函数的脚本时出现问题。发生三个错误,都在我将距离 += 设置为距离 [][] 的同一行上:

错误 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

4 回答 4

3

好吧,数组下标xy不是整数类型,例如int,而是类型double

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

像数组的第 1.46534 个元素这样的东西没有意义,所以编译器会抱怨。

于 2009-02-23T12:11:50.943 回答
2

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

于 2009-02-23T12:10:50.383 回答
1

停止使用 double 并改用 int 。

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

于 2009-02-23T12:09:43.913 回答
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。

于 2009-02-23T12:16:06.923 回答