0

皆さん、こんにちは。次の関数を含むスクリプトのコンパイルで問題が発生しました。距離 += を距離 [][] に設定した同じ行で、3 つのエラーが発生します。

エラー 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

ええと、配列の添え字は、のような整数型ではxなく、次の型です。yintdouble

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

2番目の部分に移ります。

double order [15];

は初期化されていないため、使用するとUBを呼び出します。

于 2009-02-23T12:16:06.923 に答える