向大家致以问候。编译包含以下函数的脚本时遇到问题。发生三个错误,全部在我设置距离+ =距离[] []:
的同一行错误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;
}
答案 0 :(得分:3)
嗯,数组下标x
和y
不是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。