2013-04-06 88 views
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 

爲什麼會這樣呢? 我應該如何改變這一點? 謝謝

+0

我假設線120是'IloArray range_weightedSumBR [i] = IloArray (env,r);'。這是否意味着是一個賦值或聲明(一個大小爲「i」的數組,它不是編譯時常量)?在前一種情況下:它爲什麼從一個類型說明符開始? – JoergB 2013-04-06 13:12:40

回答

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. 

編輯:

+0

我不認爲初始化是問題。它看起來很好,120行似乎是3行下降 – JoergB 2013-04-06 13:27:52

+0

@JoergB它真的很模糊。但從某種意義上說,我同意你的看法。 – taocp 2013-04-06 13:30:47

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); 

(也消除了一些額外的下劃線)