1

gen_BSTと呼ばれる汎用の二分探索木パッケージと、作成したばかりのgen_BST.AVLと呼ばれるその子があります。

コードをコンパイルしようとすると、Adaコンパイラから「制限のないタイプの完了は制限できません」というエラーメッセージが表示されます。これはどういう意味で、どのように修正すればよいですか?

本文/仕様を無視すると、これはレコード宣言です。

--Gen_BST:
--Type Declarations
   TYPE Node IS LIMITED PRIVATE; -- The node itself.
   TYPE Root IS ACCESS Node;     -- Pointer to the node.

PRIVATE

--Record Declaration
   TYPE Node IS TAGGED LIMITED RECORD
      Data : Data_Type;
      Left_Child, Right_Child : Root;
   END RECORD;



--Gen_BST.AVL:
   TYPE AVL_Node IS PRIVATE;
   TYPE AVL_Root IS ACCESS AVL_Node;

PRIVATE
   TYPE AVL_Node IS NEW Node WITH RECORD
      Height : Natural;
   END RECORD;
4

1 に答える 1

2

と言うとtype AVL_Node is new Node ...、 はAVL_Nodeからさまざまなプロパティを継承しますNodeが、それらのプロパティの 1 つに制限があります ( ARM 7.5(3) )。の公開ビューはAVL_Node制限されていないため、完全なビューも制限されている必要があります。修正の 1 つは、パブリック ビューを制限することです ( type AVL_Node is limited private;)。または、無制限の完全なビューを作成することもできますNode( type Node is tagged record ...)。

多くの人は、タグ付けされた型は常に制限されるべきであることに同意するでしょうが、私はなぜNodeAVL_Nodeが公に宣言されているのだろうか? 私はそれらが実装の一部だと思っていたでしょう。

于 2013-02-11T08:39:57.527 に答える