2016-10-20 5 views
-2

私は3つのクラスM、L、Pを持っています。それぞれカプセル化プラクティスのために.headerと.cppを持っています。それぞれの.headerと.cppC++クロス初期化フロート配列を初期化するときにcaseラベルにジャンプ

ここでは、L.cppにあるこの関数float L::calculate(arg,arg,arg,arg)を持っています。これは、そのクラス自体から取られた引数です。しかし、私は別のクラスPを持っています

P.cppでは、私はLクラスの計算機能のget/setを持っています。クラスPにはコンストラクタもあります。デフォルトと1はargsを取ります(両方のコンストラクタでLを初期化します)

次にすべての実装が一緒になるクラスMにあります。その後、

float calculateThis[size]; // the size is fixed at 50. 

xはサイズ

未満のループのために、私はこのでした:

私はこのようなfloat配列を作成しようとしています私が持っている

calculateThis[x] = newL[x].caculate(args,args,args,args); 
newP.setCalculate(calculateThis[x]); 
++x; 

を上にも宣言する

L newL[size]; //Used for some other methods that i have wrote to get inputs and save it . 
P newP[size]; 

私はこのエラーを取得するコンパイル時に:私は、float配列にfloatを返すcalcuated機能を保存しようとしています。基本的

crosses initialization of ‘float calculateThis[size]’ 
    float calculateThis[size]; 

EDIT:

switch(choice) 
    { 
    case 1: // 1st Choice. 
    while(entry<size) 
    { 
     //getting user input and saving it by newL.set/newP.set  
    }; 
    break; 

    case 2: 
    float calculateThis[size]; // the size is fixed at 50. 
    for(x=0,x<size) 
    {  calculateThis[x] = newL[x].caculate(newL.get(),newL.get(),newL.get(),newL.get()); 
      newP.setCalculate(calculateThis[x]); 
      ++x; 
    } 
    break; 

    default:break; 
    } 
+1

"_ブロックに転送することはできますが、初期化を使用して宣言をバイパスすることはできません。自動保存期間を持つローカル変数がスコープ内にないポイントから、スコープ内にあるポイントまでジャンプするプログラムは、変数がPODタイプ(3.9)を持ち、イニシャライザなしで宣言されていない限り、不正な形式になります。あなたのコードをもっと私たちに教えてください。おそらく、あなたがうんざりした 'case'ステートメントでしょう。 –

+0

@GillBatesをチェックすると、いくつかのコードが追加されています。 – what

答えて

1

使用ブラケットこれがcalculateThisのローカルスコープであることを示す:

case 2: 
    { 
     float calculateThis[size]; // the size is fixed at 50. 
     for(x=0,x<size) 
     {  
     calculateThis[x] = newL[x].caculate(newL.get(),newL.get(),newL.get(),newL.get()); 
      newP.setCalculate(calculateThis[x]); 
      ++x; 
     } 
    }break;