1

Ada for Data Structures and Algorithms クラスでプログラムを作成しています。

私の現在の問題は、 「「これ」の実際は変数でなければならない」というエラーです。 周りを見回して、アウトモードが原因であると読みましたが、なぜそれが私に起こっているのか完全には把握していません。

私が見た例は理にかなっていますが、それは私のコーディングなので、私はそれを見ていないと思いますか?

Procedure AddUnmarked(g:Grid; this:Linked_List_Coord.List_Type; c:Cell) is
      cNorth : Cell := getCell(g, North(c));
      cEast  : Cell := getCell(g, East(c));
      cSouth : Cell := getCell(g, South(c));
      cWest  : Cell := getCell(g, West(c));
   Begin
         if CellExists(g, cNorth) and not cNorth.IsMarked then
            Linked_List_Coord.Append(this, cNorth.Coords);
         elsif CellExists(g, cEast) and not cEast.IsMarked  then
            Linked_List_Coord.Append(this, cEast.Coords);
         elsif CellExists(g, cSouth) and not cSouth.IsMarked  then
            Linked_List_Coord.Append(this, cSouth.Coords);
         elsif CellExists(g, cWest) and not cWest.IsMarked  then
            Linked_List_Coord.Append(this, cWest.Coords);
         end if;
   End AddUnmarked;

「this」が関数に渡される前は、自己定義型 Coord (2 つの整数) の Linked_List です。それは初期化され、リストがコード内の上記の関数に渡される前に座標ペアが追加されています。

4

2 に答える 2

6

つまり、リストを変更可能なパラメーター、つまり、として渡さない限り、リストを変更することはできませんin out

詳述LIST_TYPEすると、タグ付きタイプのオブジェクトへのハンドルであると考えてください。LIST_TYPEそれが有効であることを確認するには、inパラメーターを介してそれを渡す(またはローカルオブジェクトを作成/操作する)必要がありますが、結果を渡すにはoutパラメーターが必要です。

したがって、既存のオブジェクトに対して操作を実行するために{そして結果を取り戻すために}必要ですin out

于 2012-10-30T03:58:09.517 に答える
2

Ada では、すべてのサブルーチン パラメータに使用モードが関連付けられています。使用可能なモードは、、、inおよびout*in outです。モードを指定しない場合 (コードで指定しなかったように)、デフォルトでinonly になります。

モードは、サブプログラムの内部でそのパラメーターを使用して何ができるかを指定します。ルーチンの外部から渡された値を読み取りたい場合は、それが必要inです。パラメータに書き込みたい場合 (および/またはルーチンの外で読み取らせたい場合) は、そのout上にある必要があります。

どのパラメータもoutそれらに含まれていないため、それらのいずれにも書き込むことはできません。

(* - 別の可能なモードがあります: access、しかしそれは高度なトピックです)。

于 2012-10-30T12:01:01.847 に答える