2

タグ付けされたレコード タイプを含むマップ コンテナが必要なため、このプログラムを作成しましたが、GNAT コンパイラはコンパイルしません。

type http_response is tagged private;
package map_package is new Ada.Containers.Ordered_Maps
    (Key_Type => Unbounded_String,
     Element_Type => http_response);

また、コンパイルエラーがあります:

http.ads:47:04: instantiation error at a-coorma.ads:199
http.ads:47:04: premature use of type with private component
http.ads:47:105: premature use of private type

実際、マップには http_response タイプから継承する他のタグ付きレコード タイプが含まれるため、ポリモーフィズムを使用したいと考えています。

このコードを修正するには?

次のようにコードを修正すると:

package map_package is new Ada.Containers.Ordered_Maps
    (Key_Type => Unbounded_String,
     Element_Type => http_response'Class);

この種のエラーが発生します:

http.ads:47:04: instantiation error at a-coorma.ads:195
http.ads:47:04: class-wide subtype with unknown discriminants in component declaration
http.ads:47:04: instantiation error at a-coorma.ads:199
http.ads:47:04: premature use of type with private component
http.ads:47:118: premature use of type with private component
4

1 に答える 1

3

3.3オブジェクトと名前付き番号で述べたように、「クラス全体のサブタイプは、未知の判別式を持つように定義されているため、不定のサブタイプです。」の代わりにAda.Containers.Ordered_Maps、をインスタンス化できる場合がありますAda.Containers.Indefinite_Ordered_Maps

于 2012-12-13T02:14:45.070 に答える