2017-04-16 6 views
0

私はチャペルの問題があるので、私は理解できないようです。サイズを設定できるキューがあります。唯一のことは、サイズを設定し、キューを0の束で満たすことです(これは意味をなさない)。数値の値ではなくヌルでキューを埋めようとしているので、後でキューがヌルかどうかを確認できるaddメソッドを処理します。私はすべてがどのように設定されているかのイメージを付けました。皆さんに指導やアイデアがあれば教えてください。私は取得しています エラーは次のとおりです。eltTypeにnil値を書き込む

エラー:intに文字列から割り当てで型の不一致(64)

私はここにそれを間違った方法をやっている必要があります。

enter image description here

答えて

4

あなたが見ているエラーがラインについてです:

elements[i] = 'nil'; 

'nil'はちょうどnil任意の引用符のように書かれている文字列ではなく、nilの値、です。配列int(64)のスロットに文字列を代入しても機能しないので、コンパイラはエラーを発行します。

チャペルでは、クラスだけで無制限の値を持つことができるので、elements配列のどの位置が満たされているかを追跡するために別の方法を使用する必要があります。

これを行う1つの方法は、有効な値を含む最初と最後の位置を追跡する2つの新しい整数をクラスに追加することです。キューに値を追加すると、lastの位置が増加し、値を削除するとfirstの位置が増加します。これらの値のいずれかが配列の終わりを通過すると、配列は前方に折り返されます。 lastfirstを捕まえると、アレイはいっぱいです。 firstlastを捕まえた場合、配列は空です。私はあなたのコードで修正されるべきだと思う

いくつか他のものがあります:

  • use semaphore.chpl; USE文は、モジュール名ではなく、ファイル名で作業するので、これはおそらくuse semaphore;でなければなりません。

  • 私はここにあなたの意図を理解していた場合は、このコードは5

    var elementsDomain: domain(1); 
    var elements: [elementsDomain] eltType = 5; 
    

    elements配列のサイズを設定しようとしている配列のドメインは、配列のサイズを制御し、その方法はへアレイのサイズを設定するドメインを介してである:

    var elementsDomain: domain(1) = {0..#5}; 
    var elements: [elementsDomain] eltType; 
    
  • elementsDomain = (0..capacity - 1);範囲リテラル値にelementsDomain設定されています。これはドメインが1次元なので動作しますが、より明確にするために、代わりに{0..capacity - 1}というドメインリテラル値に設定できます。

関連する問題