2017-11-13 5 views
0

現在の私の割り当てでは、この特定のデータにどのようにアクセスできるかを調べることができません。キューポインタを介してノードに格納されたクラスのデータにアクセスするにはどうすればよいですか?

開始するには、ファイルからデータを取得して、正常に動作するストアをシミュレートするように割り当てを呼び出します。唯一のことは、引き出されるデータは顧客に関することです。具体的には、顧客が待ち行列に入ったときと、レジ係が注文を処理するのにかかる時間です。

現在、私は顧客データをクラスの配列に格納しています。

for(int i = 0; i < entries; i++) 
{ 
    /* !!!!!IMPORTANT!!!!! 
    * The way this program extracts file data assumes that the file will 
follow a specific format 
    * results will vary heavily based on how the file is set up 
    * 
    * before docking points please make sure that the file follows the format 
    * 
    * "Number of entries" 
    * "Customer Number", "Arrival Time", "Service Time" 
    * "Customer Number", "Arrival Time", "Service Time" 
    * "Customer Number", "Arrival Time", "Service Time" 
    */ 

    xfiles >> dataEntry; 
    fileData[i].setNumber(dataEntry); 
    //inserts a number from the file into the "number" variable in the customer class. 
    xfiles >> dataEntry; 
    fileData[i].setArrival(dataEntry); 
    //inserts a number from the file into the "arrival" variable in the customer class. 
    xfiles >> dataEntry; 
    fileData[i].setServTime(dataEntry); 
    //inserts a number from the file into the "servTime" variable in the customer class. 
} 

xfiles.close(); 

これはコードには含まれていませんが、プログラムの初めのエントリで考慮する行があります。

私の次のブロックでは、一定期間顧客を同時にキューに入れて処理する必要があります。キューに入れるためにどのようにすべきか考えていますが、どのように処理を進めるべきかについてはあまりよく分かりません。私が今知っているところでは、配列の特定の顧客がキューに入れられているかどうかを確認するために条件文を実行したいと思うかもしれません。

私が現在アクセスしようとしているデータは、クラスに格納された到着時間です。

だから、
fileData [i] .returnArrival();

ですが、そのクラスはキューに格納されているため、どのようにアクセスできるかわかりません。

は今、私はすべてがキューに入れられたか、私はそれが

scully.returnFront()->temp->returnClass()->fileData.returnArrival(); 

ようなものになるだろうと思ったが、一時は内で宣言ポインタのみですので、私はについて不明だまず

for(int x = 0; x < 570; x++) 
{ 
    if(cusTime == x) 
    { 
    if(scully.isFull() = false) 
     scully.enqueue(fileData[cusTime]); 
    else if(mulder.isFull() = false) 
     mulder.enqueue(fileData[cusTime]); 
    else if(skinner.isFull() = false) 
     skinner.enqueue(fileData[cusTime]); 
    else 
     cout << "queues are full, disposing..\n"; 
    } 
    cusTime++; 
} 

ですキュークラス。

私の友人から別の提案がありましたが、これはおそらく代わりにこのようなものになるだろうと示唆しましたが、コードを実行するとセグメント化エラーが発生しました。

scully.returnFront().returnArrival() 

、あなたの配列から項目をエンキューするので:

scully.returnFront()->returnClass().returnArrival(); 

答えて

0

教授とTAと少し話し合ったところ、問題の原因はリターンフロント関数がポインタを返してノード内のデータにアクセスすることが難しくなったことでした。解決策は、戻りフロント関数にデータに関連付けられたクラスを戻し、戻りステートメントに、ノードに格納されているクラスを戻すクラス関数を指すポインターを戻すことでした。

return front; 

return front->returnClass(); 

そう

Node *returnFront(); 

関数内

Customer returnFront(); 

変更に変更しました

これらの変更により、メインファイル内からCustomerクラスのデータに簡単にアクセスできました。そこで、クラスの変数を保持する新しい場所をインスタンス化することができました。

Customer scullyTemp; 

その後、割り当てステートメントによってノードに格納されたクラスの内部からデータを格納します。

scullyTemp = scully.returnFront(); 
scullyTemp.returnArrival(); 

これは、必要以上に複雑かもしれませんが、今は必要なことを実行します。

1

私はそれは次のようであるべきだと思います。したがって、returnFront()はメソッドが可能でなければならない項目を取得します。

+0

私はクラスから家に帰るときに試してみますが、それは本当にそのように動作しますか? Frontはキュークラス内のポインタなので、少なくとも何かを指さなければならないと思いました。 –

+1

returnFrontがオブジェクトへのポインタを返す場合は、代わりに 'scully.returnFront() - > returnArrival()'を使うべきです。 –

関連する問題