1

このコード行は、私の c++ cplex ライブラリ最適化関数定義の一部です。

IloArray<IloArray<IloExpr> > weightedSumBR = IloArray<IloArray<IloExpr> >(env, r);

for(int i=0; i<r; i++) {
    weightedSumBR[i] = IloArray<IloExpr>(env, r);
    for(int j=0; j<color; j++) {
        for(int k=i*n; k<(i+1)*n; k++) {
            for(int l=0; l<N; l++) {
                 weightedSumBR[i][j] += m[k][l]*x[k][l][j];
            }
        }
    }
}

IloArray<IloArray<IloRange> > range_weightedSumBR(env, r);

for(int i=0; i<r; i++) {
    IloArray<IloRange> range_weightedSumBR[i] = IloArray<IloRange>(env, r);
    for(int j=0; j<color; j++) {
        IloRange range_weightedSum_BR[i][j] = IloRange(env, 0, weightedSum_BR[i][j], addupto);
    }
}

しかし、私は次のエラーが発生しています:

g.cpp:120:78: error: variable-sized object ‘range_weightedSumBR’ may not be initialized
g.cpp:122:68: error: ‘weightedSum_BR’ was not declared in this scope
g.cpp:122:97: error: variable-sized object ‘range_weightedSum_BR’ may not be initialized

これはなぜですか?これをどのように変更すればよいですか?ありがとうございました

4

2 に答える 2

3

私のコメントを拡張する:

IloArray<IloRange> range_weightedSumBR[i] = IloArray<IloRange>(env, r);

配列を宣言しようとしているように見えます (これにより、外側のスコープで宣言された range_weightedSumBR が隠されます。

同じことが当てはまります

IloRange range_weightedSum_BR[i][j] = IloRange(env, 0, weightedSum_BR[i][j], addupto);

私はあなたがそれらのことを意味していると思います

range_weightedSumBR[i] = IloArray<IloRange>(env, r);

range_weightedSumBR[i][j] = IloRange(env, 0, weightedSumBR[i][j], addupto);

(余分なアンダースコアも削除します)

于 2013-04-06T13:25:06.550 に答える
2

コンパイルエラーによると:

 IloArray<IloRange> range_weightedSumBR[i] = IloArray<IloRange>(env, r);

奇妙にIloArray<IloRange>見えますが、冗長に見えます。その間:

weightedSum_BR 

する必要があります

weightedSumBR  //you may have typos in your code on variable names

range_weightedSum_BR 

する必要があります

range_weightedSumBR.

編集:

于 2013-04-06T13:14:21.120 に答える